通常我使用这种脚本(这是一个更大的 bash 脚本的一部分)将我的电脑连接到静态 IP 电脑并远程运行 jupyter 笔记本:
sudo fuser -k 8881/tcp
echo 'Port 8881 is free now'
ssh -N -f -L localhost:8881:localhost:8888 $username@$servername
read -p 'SSH Tunnel created - Press enter to continue'
ssh $username@$servername 'nohup jupyter notebook --no-browser --notebook-dir="$notebookdir"'
wait
echo 'Please, wait some seconds.'
$nohup $browser http://localhost:8881/
并且它有效。但现在我需要访问具有动态 IP 的第三台电脑,并且无法使用 dyndns 等服务。一个好的解决方案是创建一个简单的 VPN,就像这里所做的那样通过第三台公网 IP 计算机在两台 behind-nat 计算机之间建立 SSH 连接。
这意味着我必须在远程 PC(动态 IP PC)上执行:
ssh -R 20000:127.0.0.1:22 user@RemoteHost
在我的本地电脑上(也有一个动态 IP):
ssh -L 8000:127.0.0.1:20000 user@RemoteHost
最后,如果我这样做:
ssh 127.0.0.1 -p 8000
这样就创建了“VPN”。但是现在我有点不知道如何运行 jupyter 笔记本转发端口,以便我可以在本地浏览器上使用远程 PC 的 jupyter 笔记本,使用具有静态 IP 的远程主机作为桥梁。
欢迎提出任何建议或提示。谢谢。
答案1
虽然可以使用跳线盒(具有静态 IP 的机器)设置 SSH,但我个人建议设置泽罗蒂尔在所有三台机器上:然后,一个简单的命令将使 Jupyter-server-port 在“本地”可用,因为每台机器都有一个“静态”IP。
在了解 Zerotier 之前,我托管的正是您所描述的内容。以下是我所知道的一些麻烦。
- 在 Jupyter Server 的主机上,需要先运行一个 cron-job 以使端口可供跳线盒使用;
- 在客户端机器上,仍然需要从跳线机获取端口。
- 如果中间任何一个环节出现故障,JupyterLab 实例就有可能停止工作。排查问题所在又是一件麻烦事。
使用 Zerotier 设置,只需要 #2 步骤,并且延迟与跳过多个 SSH 隧道(和反向隧道)相当。