X11 转发请求失败

X11 转发请求失败

我尝试ssh -Y/X ManjaroHost从 Mac 上使用,但收到“X11 转发请求失败”消息。我已经寻找解决方案两周了,并尝试了类似帖子建议的许多方法。指出我的错误将会有很大的帮助!

这是我做过的一些实验。为了清楚起见,我总是从 HostA ssh 到 HostB。 HostA 是 X 服务器和 ssh 客户端,而 HostB 是 ssh 服务器。

实验 1

HostA:我的 Macbook。
HostB:另一个Linux集群。
它工作得很好,我的 Mac 上会弹出 GUI 窗口。
在 HostA 中, echo $DISPLAY --> /private/tmp/com.apple.launchd.6AxM1TJrRh/org.xquartz:0 在 HostB 中, echo $DISPLAY --> localhost:10.0 所以我认为我的 Mac 端工作得很好。

实验2

HostA:我的 Macbook。 HostB:Manjaro Linux Lenovo。
HostA:DISPLAY 为 /private/tmp/com.apple.launchd.6AxM1TJrRh/org.xquartz:0 HostB:DISPLAY 为空。
这是来自 ssh -Yvvv 的调试信息

...
...
...
debug1: Requesting X11 forwarding with authentication spoofing.
debug1: Requesting authentication agent forwarding.
debug1: Sending environment.
debug1: channel 2: setting env LC_TERMINAL_VERSION = "3.4.15"
debug1: channel 2: setting env LANG = "en_US.UTF-8"
debug1: channel 2: setting env LC_TERMINAL = "iTerm2"
debug1: mux_client_request_session: master session id: 2
Last login: Wed Nov  9 13:55:34 2022 from 192.168.0.194
X11 forwarding request failed

实验3

如果这是由于某些互联网设置造成的,我尝试在 Manjaro Linux Lenovo 中使用 ssh -Y 127.0.0.1

主机A = 主机B = Manjaro Linux Lenovo

主机A:显示=:0

HostB(ssh 之后):DISPLAY 为空。

ssh -Yvvv 的调试信息是


 ssh -Yvvv  127.0.0.1                                                           
...
...
...
debug1: client_input_hostkeys: no new or deprecated keys from server
debug3: receive packet: type 91
debug2: channel_input_open_confirmation: channel 0: callback start
debug2: x11_get_proto: /usr/bin/xauth  list :0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 0: request x11-req confirm 1
debug3: send packet: type 98
debug2: fd 3 setting TCP_NODELAY
debug3: set_sock_tos: set socket 3 IP_TOS 0x48
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug3: send packet: type 98
debug2: channel 0: request shell confirm 1
debug3: send packet: type 98
debug2: channel_input_open_confirmation: channel 0: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug3: receive packet: type 100
debug2: channel_input_status_confirm: type 100 id 0
**X11 forwarding request failed on channel 0**
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Last login: Wed Nov  9 14:43:39 2022 from 127.0.0.1

仍然显示“通道0上的X11转发请求失败”

这是我的 Manjaro sshd_config 文件

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
AllowTcpForwarding yes
AllowAgentForwarding yes
PermitRootLogin yes

ssh_config 文件

HOST *
    #ServerAliveInterval 60
    #ServerAliveCountMax 5
    ForwardAgent yes
    ForwardX11 yes
    #ControlPersist yes
    ControlMaster auto
    ForwardX11Trusted yes

我的 Mac ssh_config 文件

HOST *
    ServerAliveInterval 60
    ServerAliveCountMax 5
    ForwardAgent yes
    ForwardX11 yes
    ControlPersist yes
    ControlMaster auto
    ControlPath ~/.ssh/master-%r@%h:%p
    ForwardX11Trusted yes
    identityfile ~/.ssh/id_rsa_gmail

我想我已经尽了一切努力,但未能解决问题。如果有人可以提供帮助,我们将不胜感激!

答案1

我的情况是 ssh 客户端消息“X11 转发请求失败”的原因是 ssh 守护进程(在服务器上)无法绑定到任何端口 6000+(X11 转发端口范围​​),因为它只尝试了 IPv6,这不起作用(它位于一个 docker 容器中,并且可能已关闭)。

/etc/sshd_config解决方案是将:中的一行从AddressFamily any(默认)更改为AddressFamily inet(即inet6)。

答案2

最常见的原因是xauth服务器上缺少程序包和可执行文件。跑去which xauth寻找答案。通常你可以安装apt install xauth之类的。

如果安装了,X11转发还是失败:也可以在服务器端开启sshd调试。

假设您拥有服务器的 root 访问权限,请找到启动 sshd 的脚本。在使用 systemd 的现代系统上,您可以sudo systemctl status ssh找到它。我的叫/lib/systemd/system/ssh.service.查找以 开头的行ExecStart=。 sshd 的调试选项是-d

您可以使用 检查服务器日志文件journalctl -b -a -u ssh

祝你好运。

答案3

感谢@Jdehan 的大力帮助!现在可以了!

使用 sudo,我在远程服务器中设置了 sshd 的调试模式。从调试信息中,我发现sshd服务只加载/etc/ssh/sshd_config文件,而没有加载.ssh/sshd_config文件!因此,我对 ~/.ssh/sshd_config 的所有编辑从未真正加载到系统中。

在 ~/.ssh 文件夹中,只有密钥和 Know_host 文件以及配置有效。但是 .ssh 中的 ssh_config、sshd_config 不会,除非您显式使用 -f 加载文件。

相关内容