如何通过Xshell经两次SSH跳转连接目标服务器与Jupyter Notebook
我刚好之前折腾过类似的场景,给你两种靠谱的方法,都能在Windows的Xshell里搞定两次SSH跳转,同时打通Jupyter Notebook的访问:
方法一:手动分步跳转+本地端口转发(适合临时使用)
这种方式操作直观,不用提前配置,适合偶尔连接的场景:
- 第一步:连接跳转机(ip_address1)
打开Xshell,新建一个会话,填入username1@ip_address1,输入密码或用密钥登录,成功进入跳转机的命令行。 - 第二步:带端口转发连接目标服务器(ip_address2)
在跳转机的命令行里执行这条命令:
解释一下:ssh -L 8889:localhost:8888 username2@ip_address28889是你本地Windows要用来访问Jupyter的端口,8888是目标服务器上Jupyter默认的端口(如果你的Jupyter改了端口,这里要对应修改)。执行完后就会登录到目标服务器的命令行。 - 第三步:启动目标服务器的Jupyter并访问
在目标服务器的命令行里启动Jupyter:
启动后会输出一个带token的链接,比如jupyter notebook --ip=0.0.0.0 --no-browserhttp://localhost:8888/?token=xxxxxx,你把这个链接里的localhost:8888改成127.0.0.1:8889,然后在本地Windows的浏览器里打开这个修改后的链接,就能正常访问Jupyter了。
方法二:配置Xshell代理+隧道实现一键连接(适合长期使用)
如果需要经常连接,建议配置成一键会话,省去每次手动输入命令的麻烦:
- 第一步:新建目标服务器的会话
打开Xshell,点击「新建」,会话名称随便填(比如「目标服务器-带跳转」),切换到「连接」标签:- 主机:填写
ip_address2 - 端口:默认22(如果目标服务器SSH端口改了,填对应端口)
- 用户名:填写
username2
- 主机:填写
- 第二步:配置本地端口转发(打通Jupyter)
切换到「隧道」标签,点击「添加」:- 类型:选择「本地(Local)」
- 源主机:填
localhost - 源端口:填你本地要用来访问的端口(比如
8889) - 目标主机:填
localhost - 目标端口:填Jupyter在目标服务器的端口(默认
8888)
点击「确定」保存这条隧道规则。
- 第三步:配置SSH跳转代理
切换到「代理」标签:- 代理类型:选择「SSH」
- 点击「设置」,在弹出的窗口里填写跳转机的信息:
- 主机:
ip_address1 - 端口:默认22(如果跳转机SSH端口改了,填对应端口)
- 用户名:
username1 - 身份验证:选择密码或密钥(和你平时登录跳转机的方式一致)
点击「确定」回到代理标签,勾选「使用代理服务器」。
- 主机:
- 第四步:一键连接并访问Jupyter
保存这个会话,双击它就能自动完成两次SSH跳转(先连跳转机,再连目标服务器)。登录到目标服务器后,同样执行jupyter notebook --ip=0.0.0.0 --no-browser,把输出的链接里的端口改成你设置的本地端口(比如8889),在本地浏览器打开即可。
一些注意事项
- 如果跳转机或目标服务器的SSH端口不是默认的22,一定要在对应的会话配置里修改端口号。
- 如果Jupyter在目标服务器上用了非默认端口,要同步修改端口转发里的「目标端口」。
- 用密钥登录的话,记得在Xshell的「用户身份验证」里选择「公钥」,并导入对应的私钥文件。
内容的提问来源于stack exchange,提问作者zichen wang




