本地端口转发

本地主机A想要访问服务器B上localhost:10086的服务,应该怎么做?一种常见做法就是,将A主机上的端口pa映射到主机B上中localhost的端口8888。

A无法直接访问B的IP地址,但是可以通过跳转机J1,J2来和B建立ssh关系,即:A–>J1—>J2—>B

host ip username port
A / / 123,124,125
J1 1.1.1.1 user1 22(22端口建立ssh关系)
J2 2.2.2.2 user2 22
B 3.3.3.3 user3 22
B:localhost 3.3.3:localhost / 10086
  1. 建立A的123端口和J2的22端口的映射,通过跳转机J1
ssh -L -N 123:2.2.2.2:22 user1@1.1.1.1
  1. 建立A的端口124和B的22端口映射,通过跳转机J2(可以使用localhost的123端口来和J2建立ssh)
ssh -L -N 124:3.3.3.3:22 user2@localhost -p 123
  1. 建立A的125端口和B的8888端口映射,通过跳转机B(可以使用localhost的124端口和B建立ssh)
ssh -L -N 125:localhost:10086 user3@localhost -p 124

很简单,既然A到J2不能直接发起ssh,就用J1做跳转,将123映射到J2的ssh端口,然后在利用123端口做跳板建立124和B的ssh端口的映射,最后利用124端口做跳板,将125映射到B的10086端口。

以上的工作也可以使用mobaXterm来完成,使用Tunneling中添加3个本地端口转发(local port forward)

本地访问远程服务器上的jupyter notebook

在远程服务器上B运行如下指令:配置jupyter使用密码验证,不打开流浏览器,配置端口

xxx@ubuntu:~$jupyter notebook --generate-config
xxx@ubuntu:~$python
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: sha1:....
xxx@ubuntu:~$vim ~/.jupyter/jupyter_notebook_config.py
c.NotebookApp.password = u'sha1:...刚才复制的那个密文'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 10086(自选服务器端口)

然后远程服务器B上运行jupyter notebook后,使用第一节中的本地端口转发技术,然后本地访问网站’localhost:125’即可连接远程服务器B上notebook。

参考文章

  1. https://www.cnblogs.com/acm-icpcer/p/11836645.html