通过用于jupyter笔记本的第三个静态ip pc在两台动态ip pc之间建立SSH桥接[关闭]
Posted
技术标签:
【中文标题】通过用于jupyter笔记本的第三个静态ip pc在两台动态ip pc之间建立SSH桥接[关闭]【英文标题】:SSH bridge between two dynamic-ip pcs through third static-ip pc for jupyter notebook [closed] 【发布时间】:2021-11-27 04:07:16 【问题描述】:通常我使用这种脚本(这是更大的 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 这样的服务。一个好的解决方案是创建一个简单的 ***,就像在这里完成的 https://superuser.com/questions/315523/ssh-connection-between-two-behind-nat-computers-through-third-public-ip-computer。
这意味着我必须在远程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
这将创建“***”。但是现在我对如何运行 jupyter notebook 转发一个端口有点迷茫,我可以在本地浏览器上使用远程 pc 的 jupyter notebook,使用带有 static-ip 的远程主机作为桥接。
欢迎任何建议或提示。谢谢。
【问题讨论】:
【参考方案1】:您可以在本地电脑上使用 ~/.ssh/config
来简化它
HOST remotehost
hostname remotehost.tld
user myuser
Host thirdparty
hostname localhost
port 20000
LocalForward 8081 localhost:8080
ProxyJump remotehost
现在你可以做一个简单的
ssh thirdparty "nohup jupyter notebook --no-browser ..."
ssh -N thirdparty
$nohup $browser http://localhost:8881/
如果您 ssh 到 thirdparty
,这将使用远程主机作为跳转框 (ProxyJump),并且配置中的 LocalFoward 会自动建立转发到您的 jupyter notebook 的端口
【讨论】:
谢谢jeb,工作几乎完美。唯一的问题是ssh第三方“nohup jupyter notebook --no-browser ...”不起作用(例外:Jupyter命令jupyter-noteboook
未找到,我还不知道为什么),我必须先做ssh - R 20000:127.0.0.1:22 user@RemoteHost 并在第三方远程电脑上启动 jupyter(jupyter notebook --no-browser ...),之后我可以运行 ssh -Nthirdparty 并在我的本地电脑上打开笔记本,所以一切正常(所有计算都在第三方远程电脑上完成)。以上是关于通过用于jupyter笔记本的第三个静态ip pc在两台动态ip pc之间建立SSH桥接[关闭]的主要内容,如果未能解决你的问题,请参考以下文章