通道0的X11转发请求失败。

60
当我执行 "ssh -X abcserver" 时,出现了 "X11 forwarding request failed on channel 0" 的错误信息。我在网上查找了解决方案,建议将 "X11UseLocalhost no" 改为 "X11UseLocalhost yes" 可以解决此问题。
然而,我和我的经理都没有管理权限。我想知道除了这个解决方案,是否有其他选项可以解决这个问题?我也没有sudo权限在服务器上直接安装X11
我的本地平台是:
Linux version 3.16.0-4-amd64 (debian-kernel@lists.debian.org)
(gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.7-ckt25-2+deb8u3 (2016-07-02)

远程平台是:

Linux version 3.13.0-88-generic (buildd@lgw01-16) 
(gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) 
#135-Ubuntu SMP Wed Jun 8 21:10:42 UTC 2016

1
尝试使用 ssh -Y ...。顺便说一下,您的问题属于网络的另一个站点。 - user3159253
仅仅因为你请求了X11转发(普通或受信任的),并不意味着另一端的sshd必须允许它。这是我要检查的第一件事情之一。同时使用ssh -vv -X(或-Y)。 - twalberg
@user3159253:你认为它应该发布在哪个网站上?SO有适当的标签,而一般的问题和一般的答案不需要特定于OP的平台。 - jvriesem
1
似乎是超级用户(superuser.com)或者unix.stackexchange.com的话题。 - user3159253
如果您只在使用 git 命令时看到此错误,请参考 https://unix.stackexchange.com/questions/240013/x11-forwarding-request-failed-when-connecting-to-github-com 中的解决方案。 - Axel Bregnsbo
如果你没有 root 权限,修复与软件包和 SSH 守护程序相关的问题可能会棘手... - rogerdpack
6个回答

60

在尝试登录时,使用-v选项将会提供大量的调试信息,这可能会给出关于问题的确切线索,例如:

debug1: Remote: No xauth program; cannot forward with spoofing.

在我的情况下,在服务器上安装xauth解决了这个问题。


11
在 CentOS 7 上,必要的软件包名为 xorg-x11-xauth - bonh
1
在 RHEL 9 上,执行 dnf install xauth 命令。 - MaxNoe

50

我不得不编辑远程服务器上的sshd配置文件以解决问题。它在Ubuntu 16.04服务器上起作用:

$ sudo vim /etc/ssh/sshd_config

Set `X11UseLocalhost no`

保存文件。

$ sudo service sshd restart

$ exit

现在它工作了!

$ ssh -X user@remotehost  
$ xclock
 

1
我被告知使用“X11UseLocalhost no”存在安全问题。那么为什么需要它?在我的Arch Linux系统上不需要它。 - Carlo Wood
重启ssh服务的命令是 sudo service ssh restart - Jack Chan
谢谢您。我的树莓派不想通过ssh -X pi@ip_address工作,这个解决了问题! - Ne3M
或者 pkill -HUP sshd,它可以在更多的操作系统上运行。 - clearlight
请注意,使用pkill -HUP sshd命令将会终止您当前的会话,与服务重启不同。 - undefined
"X11UseLocalhost no"允许通过代理使用X11。通常情况下,X11转发服务器会绑定到127.0.0.1并监听端口601X,其中1X是您的显示器编号。有一些特殊情况,X11服务器不会绑定到127.0.0.1,而是其他环回地址,如127.0.1.1,因此仅绑定到127.0.0.1将无法工作。如果X11UseLocalhost no对您有效,您可以首先打开一个X11应用程序(例如使用nohup xclock &),然后使用netstat -an | grep 601X检查绑定地址。 - undefined

29
  1. sudo apt install xauth:安装xauth。
  2. /etc/ssh/sshd_config中将#AddressFamily any改为AddressFamily inet
  3. sudo service ssh restart:重启ssh服务。

在Ubuntu 18.04 LTS上,以上步骤已足够。

通过ssh -X登录(或者激活PuTTY/KiTTY选项“启用X11转发”后),您应该可以看到环境变量DISPLAY会自动定义为localhost:10.0或类似的内容。首次成功登录(带有有效的X11转发)后,将生成文件.Xauthority,这是成功的另一个积极标志。

如果您想查看并理解会话中X11转发的详细信息,可以尝试使用lsof -i -P | grep ssh


2
谢谢,这解决了我的SSH服务器日志中的错误:“sshd [25305]:错误:无法分配互联网域X11显示套接字。” - rogerdpack
1
这取决于您的系统,应该是sudo service sshd restartsystemctl restart sshd - pacoverflow
4
AddressFamily inet 对我有帮助。当禁用IPv6时需要这个设置。 - Alan
这对我在Ubuntu 22.04 LTS上有效。@Alan,对于Ubuntu和2023年来说,这一切听起来都异常复杂。当我说“所有”时,我是指必须使用这个奇怪的变量才能转发X11。你能否请解释一下为什么需要这样做,以及是否与过去的某个状态有所不同(我想它曾经)? - Kiteloopdesign
@Kiteloopdesign... 老实说,我不知道它为什么能工作,但它确实可以。 - Alan

15

1.确保在ssh -X root@server期间您具有root权限。

2.更新/etc/ssh/sshd_config并确保取消注释此行。

    X11Forwarding yes

3.systemctl restart sshd

4.退出服务器

5.ssh -X root@server

6.virt-manager


1
我的发行版是Linux Manjaro,openssh默认情况下X11Forwarding被禁用。谢谢! - msb

3

在将ssh服务器连接到另一个wifi后,X11转发突然停止工作,除此之外没有进行其他更改,我按照这个看似完全不同的问题的答案进行了操作,结果奏效。

换句话说,对我来说,解决方案似乎是在/etc/ssh/sshd_config中指定AddressFamily inet


1
在我的情况下,作为超级用户,在远程主机上编辑/etc/ssh/sshd_config,并更改以下行可以解决问题。
从:
#X11Forwarding no

为了

X11Forwarding yes

然后,在远程主机上执行pkill -HUP sshd命令,以重新加载sshd的配置文件,并关闭sshd会话。

2
谢谢,这个在我的 Mac 上也有效。sudo launchctl stop com.openssh.sshd - Sridhar Sarnobat

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