![使用 ssh -X 时 X11 连接使用不同的身份验证协议](https://linux22.com/image/1334919/%E4%BD%BF%E7%94%A8%20ssh%20-X%20%E6%97%B6%20X11%20%E8%BF%9E%E6%8E%A5%E4%BD%BF%E7%94%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E5%8D%8F%E8%AE%AE.png)
我无法在一台服务器上使用 X 应用程序。(同一客户端可以成功连接到其他服务器,因此问题不在客户端)。
我使用 连接ssh -vvv -Y -4 jet
(也尝试使用-X
而不是-Y
,同样的问题)以强制 IPv4(这已经解决了之前的错误)。但是当我启动需要 XI 的应用程序时,出现以下情况:
debug1: client_input_channel_open: ctype x11 rchan 3 win 65536 max 16384
debug1: client_request_x11: request from 127.0.0.1 42026
debug2: fd 7 setting O_NONBLOCK
debug3: fd 7 is O_NONBLOCK
debug1: channel 1: new [x11]
debug1: confirm x11
debug2: X11 connection uses different authentication protocol.
X11 connection rejected because of wrong authentication.
debug2: X11 rejected 1 i0/o0
debug2: channel 1: read failed
debug2: channel 1: close_read
debug2: channel 1: input open -> drain
debug2: channel 1: ibuf empty
debug2: channel 1: send eof
debug2: channel 1: input drain -> closed
debug2: channel 1: write failed
debug2: channel 1: close_write
debug2: channel 1: output open -> closed
debug2: X11 closed 1 i3/o3
debug2: channel 1: send close
debug2: channel 1: rcvd close
debug2: channel 1: is dead
debug2: channel 1: garbage collecting
debug1: channel 1: free: x11, nchannels 2
debug3: channel 1: status: The following connections are open:
#0 client-session (t4 r0 i0/0 o0/0 fd 4/5 cc -1)
#1 x11 (t7 r3 i3/0 o3/0 fd 7/7 cc -1)
xterm Xt error: Can't open display: JET:10.0
xauth list
给我
JET:11 MIT-MAGIC-COOKIE-1 8d5c49524a122751ec382da3613c9408
JET:10 MIT-MAGIC-COOKIE-1 6582c5c546ca979132e2d32c64ef481d
echo $DISPLAY
给我
JET:10.0
所以我有用于此显示的 cookie。
我的服务器上的 SSH 版本是:
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
从网上找到的各种解决方案来看,有类似
xauth generate $DISPLAY MIT-MAGIC-COOKIE-1
但是当我运行此命令时,我得到的错误与我运行 X 程序时得到的错误相同(即使我rm ~/.Xauthority
之前就遇到过)。
我在 ssh 之后没有使用 sudo,而是通过私钥进行身份验证。我的服务器在 CentOs 上,我有以下 ssh 服务器配置sudo cat /etc/ssh/sshd_config|egrep -v "^#"
ListenAddress 0.0.0.0
Protocol 2
SyslogFacility AUTHPRIV
LogLevel DEBUG3
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
Subsystem sftp /usr/libexec/openssh/sftp-server
有什么迹象表明这可能导致什么原因?
答案1
以下内容为我解决了该问题,参见ssh-x11-不工作经过阿扎特:
ssh X 转发不起作用的原因是我有一个
/etc/ssh/sshrc
配置文件。手册页的结尾
sshd(8)
指出:如果 ~/.ssh/rc 存在, 运行它;否则如果 /etc/ssh/sshrc 存在,则运行它;否则运行 xauth
/etc/ssh/sshrc
因此我在服务器端添加了以下命令(也来自 sshd 手册页):
# example sshrc file
if read proto cookie && [ -n "$DISPLAY" ]; then
if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
# X11UseLocalhost=yes
echo add unix:`echo $DISPLAY |
cut -c11-` $proto $cookie
else
# X11UseLocalhost=no
echo add $DISPLAY $proto $cookie
fi | xauth -q -
fi
并且它有效!
注意:已编辑以使示例 sshrc 中的两组反引号更清晰。复制时请小心!
答案2
我只是在瞎猜,但既然你遇到了 xauth 问题,也许这与受信任的 X11 转发有关。你有没有尝试过从通过 建立的 ssh 连接执行相同的步骤ssh -vvv -X -4 jet
?