SSH X11 不工作

SSH X11 不工作

我有一台家用电脑和工作电脑,家用电脑有一个静态 IP 地址。

如果我从工作电脑 ssh 到家用电脑,ssh 连接可以正常工作,但不会显示 X11 应用程序。

在我/etc/ssh/sshd_config家:

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

在工作中我尝试了以下命令:

xhost + home HOME_IP
ssh -X home
ssh -X HOME_IP
ssh -Y home
ssh -Y HOME_IP

我的/etc/ssh/ssh_config工作:

Host *
ForwardX11 yes 
ForwardX11Trusted yes

我的~/.ssh/config工作:

Host home
HostName HOME_IP
User azat
PreferredAuthentications password
ForwardX11 yes

我的~/.Xauthority工作:

-rw------- 1 azat azat 269 Jun  7 11:25 .Xauthority

~/.Xauthority在家:

-rw------- 1 azat azat 246 Jun  7 19:03 .Xauthority

但它不起作用

当我与家里建立 ssh 连接后:

$ echo $DISPLAY
localhost:10.0

$ kate
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
kate: cannot connect to X server localhost:10.0

我在家里使用iptables,但我允许使用端口 22。根据我所读的内容,这就是我所需要的。

更新。-vvv

...
debug2:回调开始
调试2:x11_get_proto:/usr/bin/xauth 列表:0 2> /dev/null
debug1:请求带有身份验证欺骗的 X11 转发。
debug2: 通道 1: 请求 x11-req 确认 1
调试2:client_session2_setup:id 1
debug2:fd 3 设置 TCP_NODELAY
debug2:通道1:请求pty-req确认1
...

尝试启动时kate

调试1:客户端输入通道打开:ctype x11 rchan 2 win 65536 max 16384
debug1:client_request_x11:来自 127.0.0.1 55486 的请求
debug2:fd 8 设置 O_NONBLOCK
debug3:fd 8 是 O_NONBLOCK
调试1:通道2:新[x11]
调试1:确认x11
debug2:X11 连接使用不同的身份验证协议。
X11 连接因身份验证错误而被拒绝。
debug2:X11 拒绝 2 i0/o0
debug2:通道 2:读取失败
调试2:通道2:close_read
调试2:通道2:输入开路->漏极
debug2:通道2:ibuf为空
debug2:通道2:发送eof
调试2:通道2:输入漏极->关闭
debug2:通道2:写入失败
调试2:通道2:close_write
debug2:通道 2:输出打开 -> 关闭
debug2:X11 关闭 2 i3/o3
debug2:通道2:发送关闭
调试2:通道2:rcvd关闭
debug2:通道 2:已死
debug2:通道 2:垃圾收集
调试1:通道2:空闲:x11,n通道3
debug3:通道2:状态:以下连接已打开:
  #1 客户端会话(t4 r0 i0/0 o0/0 fd 5/6 cc -1)
  #2 x11(t7 r2 i3/0 o3/0 fd 8/8 cc -1)

# 与上述相同,重复约7次

Kate:无法连接到 X 服务器 localhost:10.0

UPD2 请提供您的 Linux 发行版和版本号。
您使用的是默认的 GNOME 或 KDE X 环境还是您自己定制的其他环境?

azat:~$ kded4 -version
Qt:4.7.4
KDE 开发平台:4.6.5(4.6.5)
KDE 守护进程:$Id$

您是否直接从终端窗口的命令行调用 ssh?
您使用的是哪个终端?xterm、gnome-terminal 还是?
您如何启动在 X 环境中运行的终端?通过菜单?通过热键?还是?

从终端仿真器“yakuake”
手动按 `Ctrl + N` 并输入命令

您能从 ssh -X 失败的同一终端窗口运行 xeyes 吗?

`xeyes`-未安装
但“kate”或另一个 kde 应用程序正在运行

您是否以登录 X 会话的同一用户身份调用 ssh 命令?
From the same user

UPD3

我也下载了ssh源代码,并使用debug2()写入为什么它的报告版本不同
它看到一些 cookie,其中一个是空的,另一个是MIT-MAGIC-COOKIE-1

答案1

ssh X 转发不起作用的原因是我有一个/etc/ssh/sshrc配置文件。

手册页的结尾sshd(8)指出:

如果~/.ssh/rc存在,则运行它;否则如果/etc/ssh/sshrc存在,则运行它;否则运行 xauth

/etc/ssh/sshrc因此我在服务器端添加了以下命令(也来自 sshd 手册页):

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

并且它有效!

答案2

当你在使用 ssh 时遇到问题时,你应该做的第一件事就是运行客户端并选择-v提供输出以供其他人检查:

ssh -v user@somewhere

我猜问题出在你的本地系统上。你是如何调用 ssh 命令的?你是在 shell 中手动运行它吗?还是作为脚本的一部分执行?无论哪种情况,你都需要确保本地系统的环境设置DISPLAY正确。它也需要在远程端正确设置,但该值将会有所不同远程端比本地端更安全。

从您写的内容来看,远程主机上似乎已正确设置(并且通过扩展,X11 转发已由 ssh 正确设置)。在远程系统上,您有:

$ echo $DISPLAY
localhost:10.0

在本地端显示的是什么?如果您在 shell 中,通过回显值以及从该 shell 启动 X 应用程序,应该很容易检查...xeyes当然,您始终可以使用古老的工具进行此类测试!:)

另一方面,如果您从脚本调用 ssh 命令或附加到热键,它可能不会继承您期望的环境,因此DISPLAY本地的环境变量可能根本没有设置。

此外,由于听起来你一直在摆弄你的.Xauthority文件,你可能希望将其完全删除,然后注销你的 X 会话并重新登录,这样它就会自动重新创建它。很少需要弄乱你的.Xauthority,所以尝试这样做可能只是一种无济于事的绝望措施。

您在本地应该看到的是:

$ echo $DISPLAY
:0.0

在正确配置的系统上,如果您打开 shell,则无需手动设置它,它应该从启动 shell 的环境继承。但是,我见过窗口管理器/热键配置不能正确处理环境变量继承。如果您正在运行 Linux 系统gnome-sessionkde-session使用它来启动 shell 或脚本,那么您的 X 会话环境变量应该会按照有关环境变量继承的 Ubuntu 文档

当父进程创建子进程时,例如当我们从终端运行“gedit”命令并且“bash”(父进程)创建“gedit”(子进程)时,子进程会继承父进程拥有的所有环境变量和值。

...

注意:在 Gnome 图形桌面环境中,gnome-session 是桌面上运行的所有进程的父进程。这一事实(以及继承原则)是我们能够使用环境变量强有力地影响桌面运行的关键。KDE 中的等效进程是 kde-session。

更新

感谢您发布 的输出。在这种情况下,与相比,ssh -vvv的额外详细信息很有帮助。调试输出告诉我 X11 转发已正确设置:-vvv-v

debug2: x11_get_proto: /usr/bin/xauth  list :0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 1: request x11-req confirm 1

但是:0第一行中的 让我相信您调用 ssh 的方式在本地仍然存在配置错误。在许多系统上, 的默认值DISPLAY:0.0,而不是。您是否在调用 ssh 命令之前以:0某种方式手动设置了 的值?DISPLAY

此时,有关您的本地系统以及如何调用 ssh 命令的更多信息将会很有帮助。

  • 请提供您的 Linux 发行版和版本号。
  • 您是否正在使用 X 的默认 GNOME 或 KDE 环境,还是您自己定制的其他环境?
  • 您是否从终端窗口的命令行直接调用 ssh?
  • 您使用什么终端?xterm、gnome-terminal,还是?
  • 您如何启动在 X 环境中运行的终端?通过菜单?热键?还是?
  • 您能从失败xeyes的同一个终端窗口运行吗ssh -X
  • 您是否以登录 X 会话的同一用户身份调用 ssh 命令?

最后一项很重要。如果您以另一个用户身份运行 ssh(例如,如果您打开了 root 终端窗口而不是用户终端窗口),那么即使您明确设置了,您也会遇到此问题,DISPLAY=:0因为您没有权限以另一个用户身份默认连接到 X 服务器(即使是 root 用户!)

答案3

您的配置似乎没有问题,但请按照 Agemen 的建议尝试“ssh -X home”。

另外,如果其他方法都失败了,请尝试以下方法:

从工作的地方 ssh 到家里的机器后,在“home”处输入:

xauth list

然后,在“工作”中输入

xauth

这将为您提供“xauth>”提示。从这里,输入“add”,然后复制粘贴“xauth list”的输出,一次一行(每行以“add”开头)。例如:

someguy@work:~$ xauth
Using authority file /var/run/gdm/auth-for-someguy-4MYV85/database
xauth> add work/unix:0  MIT-MAGIC-COOKIE-1  781cc753194fd55ecdf6c4cf105c40e3
xauth> 

让我们知道。

答案4

我不清楚您是否想在本地显示器上显示远程应用程序(work),或者是否想在远程系统上显示它们(home)。

对于第一种情况,我认为ssh -X host应该足够了,不需要使用 xhost。

第二种情况,您需要使用xhost的系统是home,这还不够,您还需要导出显示变量。

xhost +work
export DISPLAY=:0.0

我不太清楚你想做什么……一方面我不知道你的系统和我的系统有什么不同,另一方面你的情况需要什么样的具体配置(因为我不是专家^_^)。希望它能在某些方面对你有所帮助,因为这些配置对我来说也很有用。

相关内容