Jupyter Notebook SSH 隧道用于双层 SSH 隧道

7
我想通过SSH隧道访问Jupyter笔记本电脑,并按照这个教程进行操作。
https://hsaghir.github.io/data_science/jupyter-notebook-on-a-remote-machine-linux/

总结一下: 1. 登录远程计算机
user@local_host$ ssh user@remote_host

remote_user@remote_host$ jupyter notebook --no-browser --port=8889

2. 在新的终端中:

user@local_host$ ssh -N -L localhost:8888:localhost:8889 remote_user@remote_host

3. 然后打开浏览器并进入

localhost:8888

现在我的问题是: 我只能通过两个步骤访问远程计算机

ssh -X username@server

ssh -KX my_pc_name

我的电脑上只安装了jupyter笔记本。

当我用较长的登录过程替换第一步的第一行时,第二步该写什么?

当我插入remote_user = username and remote_user = my_pc_name时,jupyter笔记本会出现一个安全错误,要求输入令牌。步骤一获得的令牌不起作用。


其中一个解决方案是将两个ssh登录步骤合并为一个步骤。

2个回答

10

看起来 'server' 是您的网关服务器,而 'my_pc_name' 只能从那里访问。尝试建立两个已连接的 ssh 隧道,如下所示:

https://medium.com/@sankarshan7/how-to-run-jupyter-notebook-in-server-which-is-at-multi-hop-distance-a02bc8e78314

所以我会这样做。打开终端并运行:

ssh -f username@server -L 8888:localhost:8889 -N

这将连接您的本地计算机和跳板服务器,并进行端口转发。

然后打开一个新终端并运行:

ssh username@server
ssh -f my_pc_name -L 8889:localhost:8889 -N -K

这应该会将您连接到跳板服务器并在跳板服务器和我的电脑之间进行端口转发。

然后打开另一个终端并运行:

ssh -X username@server
ssh -KX my_pc_name
jupyter notebook --no-browser --port=8889

这应该会将您连接到我的电脑名称并在那里运行jupyter笔记本服务器。

最后,在本地机器上打开浏览器并访问:localhost:8888

您的ssh连接字符串中有-X选项,表示X11窗口(一种用于linux的远程桌面)。尝试去掉它看看是否仍然有效,否则您可能需要保留它。此外,-K指示转发Kerberos票证,您可能需要它以允许文件访问,因此我保留了它。

您可能需要在本地机器上尝试不同的组合来使其正常工作。


谢谢,但在这种情况下 Host-C 是什么?在 ssh 的第二步中,我没有使用另一台服务器(@server)。 - Uwe.Schneider
发生的情况(我认为)是,在您的两步连接过程中,您的第一个命令 ssh -X username@server 将您从本地计算机(Host-A,localhost)连接到跳板服务器(Host-B,server)。一旦连接成功,您运行 ssh -KX my_pc_name,这将使您连接到 Host-C,即 my_pc_name。 - Kai Aeberli
好的,但这里的Host-C是什么?在ssh -KX my_pc_name中没有@符号。 - Uwe.Schneider
Host-C 是我的电脑名称。它不会显示 @ 符号,因为假定您已经使用用户名登录了 @server,它将使用相同的用户名来访问 Host-C。 - Kai Aeberli
将答案扩展一下,附上实际可尝试的步骤。 - Kai Aeberli

6

尽管Kai给出了很好的答案,但可能会使某些人感到困惑;至少我有些问题。

为了在jupyter notebook/lab中从您的服务器与本地计算机建立连接,我们需要在本地计算机上打开三个终端窗口

请按照顺序进行。

第一个终端窗口:

ssh -f username1@gateway_server -L :7001:localhost:7001 -N -v -v

不要关闭第一个终端窗口!

第二个终端窗口:

ssh username1@gateway_server
ssh -f username2@working_server -L 7001:localhost:7001 -N -K -v -v

不要关闭第二个终端窗口!

第三个终端窗口:

ssh -X username1@gateway_server
ssh -KX username2@working_server
jupyter lab --no-browser --port=7001&

在本地计算机上完成后,打开浏览器:http://localhost:7001/

在 Mac 上测试通过。


1
它也适用于Ubuntu!谢谢,Vadim! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接