Linux中如何修复“X11 forwarding request failed on channel 0”错误
问题: 当我尝试使用ssh的x11转发选项连接到远程主机时, 我在登录时遇到了一个 "x11 forwarding request failed on channel 0" (x11 转发请求在通道0上失败)的错误。 我为什么会遇到这个错误,并且该如何修复它?
首先,我们假设你已经正确启用了ssh的x11转发。
如果你在登录时遇到"x11 forwarding request failed on channel 0" (x11 转发请求在通道0上失败),这里可能有不同的原因,解决的方法也不同。
方案一
出于安全原因,openssh服务默认将x11转发请求绑定到本地回环地址上,并且在display环境变量中将主机名设置为“localhost”。在这样的设定下,一些 x11客户端不能正确处理x11转发,这会导致报告中的错误。要解决这个问题,在/etc/ssh/sshd配置文件中加入下面这几行,它可以将x11转发请求绑定到外网卡地址上。
$ sudo vi /etc/ssh/sshd_config
x11forwarding yesx11uselocalhost no
重启ssh使设置生效:
$ sudo /etc/init.d/ssh restart (debian 6, ubuntu or linux mint)
$ sudo systemctl restart ssh.service (debian 7, centos/rhel 7, fedora)
$ sudo service sshd restart (centos/rhel 6)
方案二
如果远程主机的ssh服务禁止了ipv6,那么x11转发失败的错误也有可能发生。要解决这个情况下的错误。打开/etc/ssh/sshd配置文件,取消对"addressfamily all" (如果有这条的话)的注释。接着加入下面这行。这会强制ssh服务只使用ipv4而不是ipv6。(lctt 译注:此处恐有误,addressfamily 没有 all 这个参数,而 any 代表同时支持 ipv6和 ipv4,以此处的场景而言,应该是关闭ipv6支持,只支持 ipv4,所以此处应该是“注释掉 addressfamily any”才对。)
$ sudo vi /etc/ssh/sshd_config
addressfamily inet
再说一次,重启ssh服务来完成设置,谢谢阅读,希望能帮到大家,请继续关注,我们会努力分享更多优秀的文章。