课题组里的服务器没有连接外网,需要使用学院服务器的管理节点作为跳板机,本文主要介绍如何配置 SSHconfig 文件来实现不同局域网下机器的直连。

出于安全考虑,组里的服务器没有直接接通外网,而是通过网线连接在机房的交换机上。在正常情况下,我们必须先通过 SSH 登录学院服务器的管理节点,然后再次 SSH 嵌套登录才能连上组里的服务器。但是这样子用起来就很麻烦,并且导致 VS CodeRemote-SSH 插件也不能正常使用。

各机器之间的关系

我们首先要搞清楚各机器之间的关系:

  • 本机:即当前我们手上所使用的机器。

  • 跳板机:即学院服务器的管理节点 (IP: 10.30.13.121) ,它与校园网 (或者外网挂上学校 VPN) 接通。

  • 工作机器:即组里的 3 台服务器 (IP: 192.168.1.22、192.168.1.33 和 192.168.1.44),在机房通过网线连接学院服务器管理节点的交换机

graph LR G(本机)-->|外网|H((跳板机)) H-->|内网|I(工作机器) A(本机)-->|外网|C((学院服务器的管理节点
   10.30.13.121)) C-->|内网|D(192.168.1.22) C-->|内网|E(192.168.1.33) C-->|内网|F(192.168.1.44)
▲ 各机器之间的关系示意图 ( 流程图需代码转换后渲染,可能加载较慢 )

下面我们将介绍如何实现本机 SSH 直连工作机器。

建立与跳板机的互信 (optional)

这一步有的机器可能并不需要,但是我们还是提一下。首先建立本机跳板机 (IP: 10.30.13.121) 的互信:

ssh-copy-id -p 22 wwang@10.30.13.121

通过 ProxyCommand 实现 SSH 直连

修改本机根目录 (~).ssh 文件夹里的 config 文件 (不了解的可以先看看 SSH 使用设置):

ServerAliveInterval 60

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
  
Host tongjiphy
  HostName 10.30.13.121
  User wwang

Host tesla
	HostName 192.168.1.33
	User wwang
	ProxyCommand ssh -q -W %h:%p tongjiphy

Host geforce1
	HostName 192.168.1.22
	User wwang
	ProxyCommand ssh -q -W %h:%p tongjiphy

Host geforce2
	HostName 192.168.1.44
	User wwang
	ProxyCommand ssh -q -W %h:%p tongjiphy

这是我的 config 文件,可以看到:我以学院管理节点 (Host Alias: tongjiphy, IP: 10.30.13.121) 作为跳板机,利用 ProxyCommand (跳板机代理执行的命令) 来实现不同局域网下机器的 SSH 直连。

注: 在 Windows 下使用 ProxyCommand 后面必须加上 ssh 的完整路径,即:

ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -q -W %h:%p tongjiphy

结语

完成上述配置后就可以使用 ssh teslassh geforce1 或者 ssh geforce2 直连内网中的 3 台工作机器了,同样也可以正常使用 VS CodeRemote-SSH 插件远程编写、调试和运行程序了!🎉 🎉 🎉

Go to the Home Page

Sponsor the author if you like the contents!