
在很多情景下都要用设备连接服务器进行开发,只需要几个简单的跨平台shell工具:ssh、scp、openvpn,就可以完成多数常见的远程开发任务。SSH协议也被用于其他访问远程服务的情境中,如对github上的代码进行提交与拉取,本文也将一并讨论。
标题:OpenSSH工具访问服务器进行远程开发
SSH协议
Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接
OpenSSH是SSH协议的开源实现。它里面包含了ssh、scp等组件,可以实现常用的访问服务器的功能
ssh提供shell
需要一条简单的
ssh指令就可以链接目标设备,并提供一个可以操控它的shellssh [username]@[ip] -p 22- 注意,
ip对应设备的公网ip或者当前网络可见的内网ip - 一般地,系统的初始
username为root,也可以用已经创建的其他用户 -p标的了提供ssh服务的端口,默认为22号
- 注意,
网络连通的情况下,一般会要求确认目标机器的安全性,然后输入该用户的密码,密码正确则连接成功
连接成功后,
shell prompt会变更为该用户访问目标设备的样式。可以理解为:目标设备为登录的该用户启动了一个shell,而且当前shell的输入会最终重定向至目标设备的shell输入,目标设备的shell输出也会最终重定向到当前设备的shell输出。如果要退出当前链接会话(
session),输入exit,则目标设备会关闭这个shell进程,如果这是本链接的最后一个shell,ssh也会中止这一链接会话接下来,使用这个
shell,就可以像面前的设备一样操作链接的设备了!
scp负责文件传输
网络连通的情况下,同样只需要一条简单的
scp指令就可以同目标设备互传文件scp [sourcedir] [destinationdir]这里的两个
location:如果是本地的文件路径,就可以直接输入;如果是目标设备的文件路径,就要按照下面的格式:[username]@[ip]:[dir]该格式中的
username和ip与ssh指令一致;dir书写目标设备的文件路径即可确认该指令后,可以看到传输的进度条
有很多该指令衍生的工具,如
win10的WinSCP,可以像本地的文件资源管理器一样用鼠标操控文件的传输
openvpn连通网络
有时服务器不方便在公网上直接被访问,可以配置证书,使用证书通过openvpn来接入内网,从而通过内网ip访问服务器。
在服务端的配置以及证书的生成具体可以参考这篇教程;更多情况下,我们要作为客户端使用openvpn连接到内网,因此使用包管理安装openvpn,找到管理员分配的证书(certs),将证书目录下的文件放到特定的目录,win10下GUI的openvpn可以指定任意目录下的证书,linux下一般放/etc/openvpn/client/目录中,保存好证书后,启动openvpn进行链接。
如果使用CLI,则命令为:
sudo openvpn [certdir]/config.ovpn
接下来看提示是否连接成功,就可以使用上文的工具访问内网服务器了
注意:很多vpn的全局模式会破坏openvpn的链接
使用SSH协议访问github
github可以理解为用于托管代码的服务器。虽然它不支持直接使用shell进行操控,但它可以通过ssh key来认证具体的设备,从而在本地上传提交到github的时候,跳过输入用户名和Personal Access Token的环节,大幅简化操作
首先在本地生成
ssh key:ssh-keygen -t ed25519 -C "your_email@example.com"其中
-t后接采取的加密算法。执行后,会提示是否将生成的key存放在/home/you/.ssh/algorithm目录下,以及是否创建口令。一路默认即可生成接下来,启动
ssh-agent,添加刚刚生成的ssh key:#run ssh-agent eval "$(ssh-agent -s)" #add key for management ssh-add ~/.ssh/id_ed25519可以测试是否连接成功,正常情况下会收到
github返回的成功提示:ssh -T git@github.com接下来,将生成的
ssh key提交到github的个人信息中:profile photo->Settings->SSH and GPG keys,然后按照提示,在本地查询并输入:$ cat ~/.ssh/id_ed25519.pub # Then select and copy the contents of the id_ed25519.pub file # displayed in the terminal to your clipboard如此,便完成了本地和
github对于这一ssh key的配置,可以在以后通过SSH协议访问与操控github的资源了在本地的仓库中添加
remote时,可以直接在github上找到SSH协议访问仓库的URL,作为远程仓库地址进行配置,以后的git操作便不再需要用户认证了
参考教程
Generating a new SSH key and adding it to the ssh-agent