本地端口转发
本地主机 A 想要访问服务器 B 上 localhost:10086 的服务,应该怎么做?一种常见做法就是,将 A 主机上的一个端口映射到主机 B 端口 10086。
A 无法直接访问 B 的 IP 地址,但是可以通过跳转机 J1,J2 来和 B 建立 ssh 关系,即:A–>J1—>J2—>B
| host | ip | username | port |
|---|---|---|---|
| A | / | / | 10001,10002,10003 |
| J1 | 1.1.1.1 | user1 | 22(22 端口建立 ssh 关系) |
| J2 | 2.2.2.2 | user2 | 22 |
| B | 3.3.3.3 | user3 | 22 |
- A 登陆到跳转机 J1,然后将 A 的端口 10001 映射到 跳转机 J2 的 22 端口 (2.2.2.2:22)
sshpass -p 'pw1' ssh -f -L 1:2.2.2.2:22 -N -o StrictHostKeyChecking=no user1@1.1.1.1 |
- A 登陆到跳转机 J2(ssh 连接 localhost:10001),然后将 A 的端口 10002 映射到 B 的 22 端口 (3.3.3.3:22)
sshpass -p 'pw2' ssh -f -p 10001 -L 10002:3.3.3.3:22 -N -o StrictHostKeyChecking=no user2@localhost |
- A 登陆到 B(ssh 连接 localhost:10002),然后将 A 的端口 10003 映射到 B 的 10086 端口(localhost:10086 即 B 本机的 10086 端口)
sshpass -p 'pw3' ssh -f -p 10002 -L 10003:localhost:10086 -N -o StrictHostKeyChecking=no user3@localhost |
按序执行上面 3 条指令,就可以实现 3 个端口的映射,然后就可以使用 A 的 10002 端口就映射到 B 的 ssh 登陆端口了,使用下面命令可以直接登陆 B 机
sshpass -p 'pw3' ssh -p 10002 -o StrictHostKeyChecking=no user3@localhost |
并且使用 A 的 localhost:10003 来访问 B 上的 10086 服务。
本地访问远程服务器上的 Jupyter Notebook
在远程服务器上 B 运行如下指令:配置 jupyter 使用密码验证,不打开流浏览器,配置端口
xxx@ubuntu:~$jupyter server --generate-config |
然后远程服务器 B 上运行 jupyter notebook 后,使用第一节中的本地端口转发技术,然后本地访问网站 ‘localhost:10003’ 即可连接远程服务器 B 上 notebook。
参考文章