在很多情景下都要用设备连接服务器进行开发,只需要几个简单的跨平台shell
工具:ssh
、scp
、openvpn
,就可以完成多数常见的远程开发任务。SSH
协议也被用于其他访问远程服务的情境中,如对github
上的代码进行提交与拉取,本文也将一并讨论。
标题:OpenSSH工具访问服务器进行远程开发
SSH协议
Secure Shell
(安全外壳协议,简称SSH
)是一种加密的网络传输协议。SSH
通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接
OpenSSH
是SSH
协议的开源实现。它里面包含了ssh
、scp
等组件,可以实现常用的访问服务器的功能
ssh提供shell
需要一条简单的
ssh
指令就可以链接目标设备,并提供一个可以操控它的shell
ssh [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