关于多层跳板 ssh 的端口映射

关于如何通过一个跳板机进行 ssh,笔者已经在前文中介绍了基本操作。

在使用过程中,笔者发现如果在目的 Ubuntu 环境中开启 Tensorboard 查看器,其会在目标 Ubuntu 环境的本地监听一个端口(默认为 6006 端口),浏览器访问此端口即可打开 Tensorboard 查看器页面。通常,在 ssh 直接连接,不经过跳板的情况下,在启动 Tensorboard 时,VS Code 会自动建立服务器端口映射到本地计算机端口的 SSH 隧道。

但是,在多层跳板环境中,这种端口映射仅仅是第一层跳板机到本地计算机的 SSH 隧道,落地服务器的端口实际上没有被映射过来。

经过探究,发现如果要实现落地端口到本机的映射,只要在每一层跳板都设置端口映射,通过端口“接力”映射的方式,即可完成端口的链式映射。

具体地,这里还是以 Tensorboard 为例,设置链式映射。在本机要进行 ssh 时,就可以设置第一层链式映射:

ssh -p [jumpserver1_port] -L 6006:localhost:6006 user1@jumpserver1_ip

以上的操作将第一层跳板服务器的 6006 端口映射到本地的 6006 端口。同样地,我们在第一层跳板的 ssh shell 里面,执行以下命令,设置第二层链式映射:

ssh -p [jumpserver2_port] -L 6006:localhost:6006 user2@jumpserver2_ip

以上的操作也将第二层跳板的 6006 端口映射到第一层跳板的 6006 端口。最后,我们通过第二层跳板登录到落地服务器:

ssh -p [landingserver_port] -L 6006:localhost:6006 landinguser@landingserver_ip

这样的命令实现了将落地服务器的 6006 端口映射到第二层跳板的 6006 端口。

经过上述操作,就可以实现

落地服务器 6006端口 -> 第二层跳板的 6006 端口 -> 第一层跳板的 6006 端口

这样一套链式映射。

在实际使用中,可以根据需要,增减跳板服务器的数量,但原理是大同小异的。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

You might also like