远程使用内网服务器的tensorboard和jupyter notebook

葛奇
2023-12-01

基本做法就是通过ssh建立主机和服务器之间的隧道,然后把服务器当地的端口转发到主机。
值得注意的是ssh尤其是开放端口的ssh存在安全风险,使用需谨慎。

建立SSH隧道

关于ssh的应用可以参考ssh -D -L -R 差异。(这篇文章里的host1可以看作客户端,host2看作服务器,host3是中间转接主机3)
主要困难在于服务器位于内网,外网客户端不可见。客户端分两种情况,分别是客户端位于内网和外网。(外网指的是有公网IP,世界任意位置可以通过其IP地址找到该电脑; 而内网指的是无公网IP,只能通过局域网其他主机访问。)
情况一:客户端位于外网
此种情况下,服务器可以通过IP地址寻址客户端,所以在服务器端建立与客户端的反向链接。通过-N -f后台运行。具体命令为:

在服务器主机上执行:
ssh -f -NR <client_port>:localhost:<server_port> [username@]<client_ip_address>

情况二:客户端位于内网
此种情况下,服务器和客户端互相找不到对方,但是存在某个可以共同访问的主机3(如果不存在就需要申请一个云虚拟主机)。通过主机3转发两者之间的链接。具体命令为:

在主机3上执行:
ssh -f -NR <server_port>:<client_ip_address>:<client_port> [username@]<server_ip_address>

还有一种极端情况,就是客户端和服务器之间通过超过一个的主机相连,即存在client<–>host3<–>host4<–>…<–>hostn<–>server的链路。那么可以通过一种普适的方法解决,也是大多数情况都可以使用的方法:从client开始,依次在链路主机上建立本地转发。具体命令如下:

在客户端上执行:
ssh -f -NL <host3_port>:localhost:<client_port> [username@]<host3_ip_address>
在i=3到n-1主机上执行:
ssh -f -NL <host{i+1}_port>:localhost:<host{i}_port> [username@]<host{i+1}_ip_address> 
在hostn主机上执行:
ssh -f -NL <server_port>:localhost:<hostn_port> [username@]server_ip_address

使用tensorboard和jupyter notebook

tensorboard的server port是6006;
jupyter notebook的server port是8888。

构造好隧道之后,在服务器端正常调用tensorboard以及jupyter notebook。在客户端的chrome浏览器地址栏使用localhost:<client_port>访问即可。

 类似资料: