通过SSH代理连接目标机器

公司的服务器一般都是在内网里面只有内网地址,因为没办法直接在外网访问。这时会布署一台既有内网IP也有外网IP的机器,用作跳板机。也就是说,要登录内网的服务器,先用ssh登录跳板机再从跳板机用ssh登录到内网目标机器。

多了一层中转有时会非常的不方便,比如使用scp上传文件到内网服务器,需要先把文件上传到跳板机,再把文件scp到目标服务器上。

SSH提供了ProxyCommand用于设置代理命令,使用它可以达到透明转发过的效果。

首先配置一下跳板机,在.ssh/config文件中加入跳板机的配置

Host jump
HostName 192.168.1.8
Port 22
User username
IdentityFile ~/.ssh/id_rsa

保存之后,使用ssh jump就可以登录跳板机了,之后再加入内网目标机器的配置

Host backend01
  Hostname 10.0.101.11
  port 22
  user backendyanfa
  ProxyCommand ssh jump -W %h:%p
  IdentityFile ~/.ssh/id_rsa

这时,使用ssh backend01就可以登录服务器了,就像直接连接一样。很是方便,也可以直接使用scp /path/to/file backend01:~/file来上传文件。

身在大陆有时候防问github会很慢,如果是通过ssh协议访问github,也是可以通过ProxyCommand通过代理来访问的。

Host github
HostName github.com
Port 22
User git
IdentityFile ~/.ssh/id_rsa
# MacOS使用HTTP代理,需要brew install socat
# ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=1087
# Windows使用socks5代理
ProxyCommand nc -v -x 127.0.0.1:1086 %h %p
# 如果Windows平台没有nc命令,可以使用connect
# ProxyCommand connect -S 127.0.0.1:1086 %h %p