通常,办公环境的电脑无法直接连接到开发测试服务器,往往需要进行多次ssh跳转。这时可通过配置ssh支持自动跳转登录功能。假设有2台服务器A和B在我们的开发测试环境中,本地我们只能连接到A服务器,而A服务器可以连接到B服务器。编辑~/.ssh/config文件,输入下列内容:
Host serverA
User root
HostName 10.1.2.3
IdentityFile /home/myusername/.ssh/id_rsa
Port 22
Host serverB
User root
HostName 192.168.1.3
IdentityFile /home/myusername/.ssh/id_rsa
port 22
ProxyJump serverA
此时,在本地即可通过ssh serverB直接连接到服务器B的ssh服务。如果要使用免密方式进行登录。则需要执行ssh-copy-id root@serverA和ssh-copy-id root@serverB进行配置免密。
在进行了这样的配置之后,我们也可以更加方便的建立隧道来使用了。比如在服务器上有一个8080的http服务,想要在本地浏览器里访问。那么,可以执行下列命令建立隧道:
ssh -Nf -Llocalhost:8080:192.168.1.3:8080 serverB
此命令会将serverB上的8080端口映射到本地的8080端口上,在浏览器中我们只需要输入http://localhost:8080可以访问到serverB上的web服务。
同样,也可以通过-R选项将本地端口映射到serverB的某个端口上,比如在微信公众号开发测试的时候,可以将配置在公众平台的服务器地址上的服务映射到本地。
为了避免网络连接中断导致隧道断开连接,可以使用systemd来保活,隧道进程退出后自动将其拉起:
# cat /lib/systemd/system//my-http-proxy.service
[Unit]
Describe=my nginx agent
After=network.target
[Service]
LimitNOFILE=10000
Type=simple
User=root
Group=root
ExecStart=/usr/bin/ssh -oExitOnForwardFailure=yes -oPubkeyAuthentication=yes -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oServerAliveInterval=5 -oServerAliveCountMax=3 -Llocalhost:8080:localhost:8080 -N root@serverB
Restart = always
RestartSec = 1s
StartLimitInterval = 0
[Install]
WantedBy=network.target
执行systemctl…
linux配置多级服务器登录和隧道映射
发布于