通过SSH隧道将Spyder连接到远程内核

8
我正在尝试将运行在本地机器(macOS)上的Spyder连接到运行在compute_server上的远程内核(一个集群的计算节点)。该计算节点不能直接通过互联网访问,我只能通过登录服务器访问集群。
我尝试以下操作:
1. 在compute_server上执行以下命令: ``` python -m spyder_kernels.console ``` 要连接另一个客户端到这个内核,请使用:--existing kernel-20351.json
我将这个json文件复制到本地机器上的适当位置。它包含以下文本: ``` "shell_port": 46540, "iopub_port": 39268, "stdin_port": 40704, "control_port": 42637, "hb_port": 46887, ```
2. 我通过登录服务器创建了一个ssh隧道。在本地机器上执行以下命令: ``` ssh -L46540:compute_server:46540 -L39268:compute_server:39268 -L40704:compute_server:40704 -L42637:compute_server:42637 -L46887:compute_server:46887 me@login_server ```
3. 我在本地机器上启动spyder,并要求它连接到现有的内核,输入json文件的名称,勾选“这是一个远程内核”的框,以me@login_server作为主机名。我已经设置好了用于登录到登录服务器的ssh密钥。
连接一直处于等待状态。如果我在login_server上启动spyder内核并省略第2步,则可以正常工作,但我不能在login_server上进行大量计算,必须在compute_server上工作。
有任何想法吗?

2
Spyder维护者在此) 请忽略上述描述中的第二步,然后再试一次。您不需要手动创建隧道,因为Spyder会为您完成这项工作(这就是为什么它需要您的ssh凭据)。 - Carlos Cordoba
1
谢谢,但是如果我在计算节点上启动内核,这似乎不起作用。 如果我在主机名对话框中放置 me@compute_server,则无法连接(可能是因为我无法通过ssh登录compute_server)。 如果我放 me@login_server,也不起作用,可能是因为spyder不知道内核正在运行的数千个计算节点中的哪一个。 json文件似乎没有此信息。 正如我在原始帖子中所述,如果我在登录节点上启动内核,则省略步骤2完全正常,但是如果我在计算节点上启动它,则不起作用。 - Chris Thomas
你能解决这个问题吗?我也遇到了同样的问题,但我找不到解决方法。 - JulianGiles
不,我从未解决过这个问题,但我发现在Jupyter中也可以做同样的事情。我使用了一组专门为我在工作的集群编写的工具,但如果你有时间,你可能可以为Spyder适应一些东西。https://github.com/Kirill888/nci-tools 如果你成功了,请告诉我。 - Chris Thomas
@JulianGiles,如果你还在寻找解决方案,我相信在连接Spyder到远程内核时,输入localhost作为主机名(并输入正确的端口)应该可以解决问题。 - Lu Kas
@LuKas 是的,非常抱歉我没有在这里确认是否成功。实际上,您需要输入 localhost 作为主机名进行连接,因为隧道正在将本地端口链接到远程服务器。 - JulianGiles
1个回答

1

如果您将Spyder连接到localhost,我相信它应该可以正常工作。因此,在“这是远程内核”框中,输入localhost作为主机名。并输入相关的端口号(!)。

(还要添加您的用户名和密码以用于compute_server。)


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