为ssh及sftp设置代理

越来越多公司使用大公司的云服务,许多云服务提供商(比如腾讯)为了自身安全不允许客户直接ssh/sftp云端,而要通过跳板机(代理服务)中转,也就是俗称的ssh over proxy。

SSH:
ssh自身不支持代理,但是允许使用第三方的代理,比较常见的代理软件就是corkscrew。从官网下载下源码直接./configure && make && make install就好了。
之后再用户home目录下(~目录) 的.ssh文件夹下创建一个config文件,按如下格式填写

Host [your-ssh-host]
ProxyCommand corkscrew [proxy-addr] [proxy-port] %h %p
ServerAliveInterval 120

其中%h %p是ssh的参数,当你用ssh连接某台服务器的时候ssh会用这台服务器的地址代替%h,端口代替%p运行ProxyCommand后面的指令。
corkscrew接受的参数格式是

corkscrew [proxy-addr] [proxy-port] [your-ssh-host] [your-ssh-host-port]

所以ProxyCommand要写成那样,如果你不用corkscrew而是别的代理程序,注意一下按相应的要求来调整ProxyCommand后面的命令。
而ServerAliveInterval规定了ssh多久没有操作时自动发送一个no-op指令,来保持与服务器的连接。
如果不设这个参数,ssh太久没有操作就会被服务器断开。
举个范例我要连接192.168.0.90:8888,通过192.168.0.2:8080这台代理,我就要这样配置:

Host 192.168.0.90
ProxyCommand corkscrew 192.168.0.2 8080 %h %p
ServerAliveInterval 120

这样当我用ssh来连接192.168.0.90时就会激活上面这条规则,使用代理来连接:

ssh -p 8888 192.168.0.90

SFTP:
sftp底层就是使用ssh,所以配好了ssh的规则就可以使用了,但是sftp不接受-p参数,像上面那个范例我们要使用8888端口而不是默认的端口我们就不能像ssh那样加-p参数
而是要加-o跟ssh指令,端口是PORT指令,所以用sftp连接192.168.0.90:8888就要写成

sftp -oPORT=8888 192.168.0.90

如果想知道-o后还能接什么指令,man ssh看-o参数的介绍即可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.