本地端口转发
本地主机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 notebook --generate-config |
然后远程服务器B上运行jupyter notebook
后,使用第一节中的本地端口转发技术,然后本地访问网站’localhost:10003’即可连接远程服务器B上notebook。
参考文章