我尝试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 加载文件。