通过PuTTY建立SSH隧道后,浏览器连接远程Jupyter遇101错误的解决方法
我之前也碰到过一模一样的问题,折腾了好一阵才搞定,给你列几个排查和解决的步骤,按顺序试应该能搞定:
第一步:检查PuTTY的SSH隧道配置是否正确
这是最容易出错的环节,一定要仔细核对:
- 打开PuTTY后,先进入Connection > SSH > Tunnels选项卡:
- 「Source port」填你本地要用来访问的端口,比如
8888 - 「Destination」必须填
localhost:远程Jupyter的端口——比如远程Jupyter跑在8889端口,就写localhost:8889 - 要选中Local和Auto选项,然后点击「Add」,确保下方的转发列表里出现类似
L8888 localhost:8889的条目 - 注意:必须先配置好隧道,再点击「Open」建立SSH连接;如果已经打开会话再改配置,是不会生效的,得重新开一个会话
- 「Source port」填你本地要用来访问的端口,比如
第二步:确认远程机器上的Jupyter正在正确运行
隧道通了但Jupyter本身没配置对也白搭:
- 登录到远程机器,用命令
jupyter notebook list查看当前运行的Jupyter服务,确认状态是running,且端口和你隧道里填的目标端口完全一致 - 启动Jupyter时,必须加上
--ip=0.0.0.0参数!Jupyter默认只绑定本地回环地址,即使隧道通了也没法外部访问。正确的启动命令应该是:jupyter notebook --ip=0.0.0.0 --port=8889(端口换成你实际用的) - 检查远程机器的防火墙:用
telnet localhost 8889在远程机器上测试,如果能连通,说明本地回环访问该端口是允许的;如果连不上,需要调整防火墙规则允许127.0.0.1访问Jupyter端口
第三步:本地机器的排查
本地端口冲突或访问方式错了也会触发重置:
- 检查本地端口是否被占用:Windows用
netstat -ano | findstr :8888,Linux/macOS用lsof -i :8888,如果有其他程序占用,就换一个未被使用的端口(比如8887) - 访问时一定要用
http://localhost:8888(对应你设置的源端口),不要直接输远程机器的IP——隧道的作用就是把本地端口的请求转发到远程的localhost - 用
telnet localhost 8888在本地测试连接:如果提示「连接被重置」,说明隧道本身没建立成功;如果是「无法连接」,大概率是PuTTY的隧道配置有误
第四步:进阶排查SSH隧道的连通性
如果前面的步骤都没问题,就需要确认SSH隧道是否真的在工作:
- 开启PuTTY的日志:进入Connection > SSH > Logging,把日志级别设为「SSH packets」,然后重新连接,查看日志里有没有类似「Local port 8888 forwarding to localhost:8889」的记录,以此确认隧道是否成功建立
- 在远程机器上用
ss -tulpn | grep ssh查看SSH的转发状态,确认是否有对应的转发端口在监听
最后几个容易忽略的坑
- 远程机器的SSH服务器可能禁用了TCP转发:登录远程机器查看
/etc/ssh/sshd_config文件,确保AllowTcpForwarding选项设为yes(或者没有被注释掉),修改后需要重启sshd服务:sudo systemctl restart sshd - 如果远程是Windows机器,要确保OpenSSH服务的TCP转发功能是开启的,或者使用支持端口转发的SSH服务器
内容的提问来源于stack exchange,提问作者Dmytro Fedoriuk
相关产品推荐
相关产品推荐

