SSH X11 转发不起作用。为什么?

SSH X11 转发不起作用。为什么?

这是一个调试问题。当您要求澄清时,请确保它尚未被涵盖在下面。

我有 4 台机器:Z、A、N 和 M。

要到达 A,您必须先登录 Z。

要到达 M 您必须先登录 N。

以下工作:

ssh -X Z xclock
ssh -X Z ssh -X Z xclock
ssh -X Z ssh -X A xclock
ssh -X N xclock
ssh -X N ssh -X N xclock

但事实并非如此:

ssh -X N ssh -X M xclock
Error: Can't open display: 

登录 M 时显然没有设置 $DISPLAY。问题是为什么?

Z 和 A 共享同一个 NFS-homedir。N 和 M 共享同一个 NFS-homedir。N 的 sshd 在非标准端口上运行。

$ grep X11 <(ssh Z cat /etc/ssh/ssh_config) 
ForwardX11 yes
# ForwardX11Trusted yes

$ grep X11 <(ssh N cat /etc/ssh/ssh_config) 
ForwardX11 yes
# ForwardX11Trusted yes

N:/etc/ssh/ssh_config==Z:/etc/ssh/ssh_configM:/etc/ssh/ssh_config==A:/etc/ssh/ssh_config

/etc/ssh/sshd_config对于所有 4 台机器来说都是相同的(除了端口和某些组的登录权限)。

如果我将 M 的 ssh 端口转发到我的本地机器,它仍然不起作用:

terminal1$ ssh -L 8888:M:22 N
terminal2$ ssh -X -p 8888 localhost xclock
Error: Can't open display:

A:.Xauthority 包含 A,但 M:.Xauthority 不包含 M。

xauth安装/usr/bin/xauth在 A 和 M 上。

xauth在登录 A 时正在运行,但是不是当登录到 M 时。

ssh -vvv登录 A 和 M 时不会抱怨 X11 或 xauth。两者都说:

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 0
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug1: Sending environment.

我感觉问题可能与 M:.Xauthority 中缺少 M(由于xauth未运行而导致)或 $DISPLAY 以某种方式被登录脚本禁用有关,但我无法弄清楚问题出在哪里。

-- 更新 20110628

我不知道,sshrc所以这是一个很好的猜测。但遗憾的是,这不是问题所在。它不存在于以下 4 台机器中的任何一台上:

$ ls ~/.ssh/rc /etc/ssh/sshrc
ls: cannot access /home/tange/.ssh/rc: No such file or directory
ls: cannot access /etc/ssh/sshrc: No such file or directory

如上所述,$DISPLAY 变量未在 M 上设置,但在 A 上可以设置:

$ ssh -X N ssh -X M 'echo \$DISPLAY'
<<empty>>
$ ssh -X Z ssh -X A 'echo \$DISPLAY'
localhost:14.0

工作会话和非工作会话的输出差异(注意:非工作会话中没有关于 X 转发或 xauth 的警告):

$ stdout ssh -X Z ssh -vX A 'echo \$DISPLAY' >/tmp/a
$ stdout ssh -X N ssh -vX M 'echo \$DISPLAY' >/tmp/b
$ diff /tmp/a /tmp/b
4c4
< debug1: Connecting to A [1.1.1.5] port 22.
---
> debug1: Connecting to M [1.1.3.3] port 22.
23,24c23,24
< debug1: Host 'A' is known and matches the RSA host key.
< debug1: Found key in /home/tange/.ssh/known_hosts:35
---
> debug1: Host 'M' is known and matches the RSA host key.
> debug1: Found key in /home/tange/.ssh/known_hosts:1
43d42
< debug1: Sending env LC_ALL = en_US.UTF-8
46c45
< localhost:14.0
---
> 
53,54c52,53
< Transferred: sent 2384, received 2312 bytes, in 0.2 seconds
< Bytes per second: sent 10714.8, received 10391.2
---
> Transferred: sent 2336, received 2296 bytes, in 0.0 seconds
> Bytes per second: sent 54629.1, received 53693.7

在 M 上安装lsh-server而不是openssh-server修复 X-forwarding,但这是一个不可接受的解决方案。

答案1

您没有指定是否在M 上X11Forwarding设置为,这肯定可以解释为什么它不起作用。yes/etc/ssh/sshd_config

答案2

就我而言,防火墙默认策略被设置为“DROP”。

您需要检查正在监听哪个端口(通常是 6000 + $DISPLAY 环境变量中的值)并设置适当的规则。以 root 身份运行:

# echo $DISPLAY
localhost:10.0

# netstat -altnp | grep LIST          
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      13670/sshd

# iptables -A INPUT -i lo -p tcp -m tcp --dport 6010 -j ACCEPT 
# iptables -A INPUT -i lo -p tcp -m tcp --sport 6010 -j ACCEPT
# iptables -A OUTPUT -o lo -p tcp -m tcp --dport 6010 -j ACCEPT 
# iptables -A OUTPUT -o lo -p tcp -m tcp --sport 6010 -j ACCEPT

相关内容