使用 ssh -X 时 X11 连接使用不同的身份验证协议

使用 ssh -X 时 X11 连接使用不同的身份验证协议

我无法在一台服务器上使用 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

相关内容