Ubuntu16.04跨主机SSH端口转发访问GUI遇连接拒绝问题求助
解决SSH本地转发出现
channel 2: open failed: connect failed: Connection refused的问题 这问题我碰到过好几次,咱们一步步排查解决:
1. 先确认测试机(test-PC)的80端口是否有服务监听
你用的转发规则是-L 8091:localhost:80,意思是把main-PC的8091端口转发到test-PC的localhost:80。如果test-PC上根本没有服务在监听80端口,自然会出现连接拒绝的错误。
在test-PC上执行以下命令检查80端口的监听状态:
netstat -tulpn | grep :80 # 或者用更现代的ss命令 ss -tulpn | grep :80
如果输出为空,说明80端口没有任何服务运行。这时候你需要:
- 要么启动一个监听80端口的服务(比如Apache),但这和你要访问GUI的需求不匹配;
- 要么换一个对应GUI服务的端口(比如VNC默认的5900、XRDP的3389,或者用X11转发的方式,下面会说)。
2. 验证test-PC的SSH转发配置是否生效
虽然你修改了/etc/ssh/sshd_config添加了AllowTcpForwarding yes,但要确保配置真的生效了:
- 先检查配置文件有没有拼写错误(比如大小写、空格):
确保输出是grep -i "AllowTcpForwarding" /etc/ssh/sshd_configAllowTcpForwarding yes(没有被注释掉,即行首没有#)。 - 确认SSH服务已经重启:
Ubuntu 16.04也可能用sudo systemctl restart sshsudo service ssh restart,两种都试试。
3. 检查test-PC的防火墙设置
Ubuntu 16.04默认用ufw防火墙,虽然是本地端口转发,但偶尔会出现loopback接口被限制的情况:
- 查看当前防火墙规则:
sudo ufw status - 如果发现有规则阻止了localhost的80端口,可以临时关闭防火墙测试:
如果关闭后问题解决,再重新配置ufw允许本地访问80端口:sudo ufw disablesudo ufw allow in on lo to any port 80 sudo ufw enable
4. 针对“访问测试机GUI”的正确方案
其实你要访问GUI的话,用80端口的本地转发完全不对路,推荐两种更合适的方式:
方式一:SSH X11转发(轻量,适合单程序)
直接在main-PC上执行带X11转发的SSH命令:
ssh -X ikayyy@172.16.61.16
登录成功后,直接在终端里输入GUI程序的名字(比如gedit、firefox),程序界面就会显示在main-PC上。
注意:如果没反应,要确认test-PC上安装了xauth,main-PC上有X服务器(Ubuntu桌面版默认自带,服务器版需要安装xorg)。
方式二:VNC+SSH隧道(完整桌面)
如果需要完整的桌面环境,建议用VNC:
- 在test-PC上安装VNC服务器:
sudo apt-get update sudo apt-get install tightvncserver - 启动VNC服务器,设置密码:
这里的tightvncserver :1:1对应端口5901。 - 在main-PC上建立SSH隧道:
ssh -L 5901:localhost:5901 ikayyy@172.16.61.16 - 在main-PC上打开VNC Viewer,连接
localhost:5901,输入你设置的密码就能看到test-PC的完整桌面了。
内容的提问来源于stack exchange,提问作者Imrank
相关产品推荐
相关产品推荐

