SSH X11不能正常工作

我有一个家庭和工作的电脑,家里的电脑有一个静态的IP地址。

如果我从工作计算机sshsh到我的家用电脑,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 

但它不起作用

在我build立一个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.根据我所读到的,这就是我所需要的。

UPD。-vvv

 ...
 debug2:callback开始
 debug2:x11_get_proto:/ usr / bin / xauth list:0 2> / dev / null
 debug1:请求身份validation欺骗的X11转发。
 debug2:通道1:请求x11-req确认1
 debug2:client_session2_setup:id 1
 debug2:fd 3设置TCP_NODELAY
 debug2:通道1:请求pty-req确认1
 ...

当尝试发射kate

 debug1:client_input_channel_open: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
 debug1:通道2:new [x11]
 debug1:确认x11
 debug2:X11连接使用不同的身份validation协议。
由于错误的身份validation,X11连接被拒绝。
 debug2:X11拒绝2 i0 / o0
 debug2:通道2:读取失败
 debug2:通道2:close_read
debugging2:通道2:input打开 - >排水
 debug2:通道2:ibuf空
 debug2:通道2:发送eof
 debug2:通道2:input漏极 - >closures
 debug2:通道2:写入失败
 debug2:通道2:close_write
 debug2:通道2:输出打开 - >closures
 debug2:X11closures了2个i3 / o3
debugging2:通道2:发送closures
 debug2:通道2:rcvdclosures
 debug2:通道2:死了
 debug2:通道2:垃圾收集
 debug1:通道2:空闲:x11,nchannels 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 $

你是从terminal窗口直接在命令行上调用ssh吗?
你在用什么terminal? xterm,gnome-terminal还是?
你是怎么开始在X环境下运行的terminal的? 从菜单? 热键? 要么 ?

从terminal模拟器`yakuake`
手动按下“Ctrl + N”并写入命令

你可以从ssh -X失败的terminal窗口运行xeyes吗?

 `xeyes`  - 没有安装
但`kate`或其他kde应用程序正在运行

你是否以与loginX会话的用户相同的方式调用ssh命令?
From the same user

UPD3

我也下载了ssh源文件,并用debug2()写了为什么它的报告版本不一样
它看到一些cookies,其中一个是空的,另一个是MIT-MAGIC-COOKIE-1

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

    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 

    它的工作原理!

    任何时候遇到麻烦的时候,你应该做的第一件事情就是用-v选项运行客户端来为其他人提供输出来检查:

     ssh -v user@somewhere 

    我将猜测问题出在您的本地系统上。 你如何调用SSH命令? 你是否在shell中手动运行它? 还是作为脚本的一部分被执行? 无论哪种情况,您都需要确保本地系统的DISPLAY环境设置正确。 它也需要在远端进行正确的设置,但是远端的数值与本端不同。

    从你写的东西看来,它正在远程主机上正确设置(通过扩展X11转发正在通过SSH正确设置)。 在远程系统上你有:

     $ echo $DISPLAY localhost:10.0 

    那在当地有什么performance? 这应该很容易检查,如果你在一个shell中,通过回应价值,以及从该shell启动一个X应用程序…当然,你可以总是使用古老的xeyes进行这种testing! 🙂

    另一方面,如果从脚本调用ssh命令或连接到热键,则可能不会inheritance所期望的环境,因此本地端的DISPLAY环境variables可能根本就没有设置。

    另外,因为听起来好像你一直在处理你的.Xauthority文件,你可能需要完全删除它,然后退出X会话并重新login,这样它会自动重新创build它。 很less有需要沉迷于你的.Xauthority ,所以尝试这可能只是一个绝望的措施,将无济于事。

    你应该在本地看到的是:

     $ echo $DISPLAY :0.0 

    在正确configuration的系统上,如果你打开一个shell,你不需要手动设置它,它应该从启动你的shell的环境inheritance。 不过,我已经看到了窗口pipe理器/热键configuration,没有正确处理环境variables的inheritance。 如果你的linux系统运行gnome-session或者kde-session来启动你的shell或者脚本,那么你的X会话环境variables应该按照Ubuntu文档中有关环境variablesinheritance的描述来正确设置:

    当一个父进程创build一个subprocess时,例如当我们从terminal运行“gedit”命令,“bash”(父进程)创build“gedit”(subprocess)时,subprocessinheritance所有的环境variables,父进程的价值。

    注意:在Gnomegraphics桌面环境中,gnome-session是桌面上运行的所有进程的父进程。 这个事实(与inheritance原则一起)是我们有能力有效地影响我们的环境variables的桌面操作的关键。 KDE中的等价过程是kde-session。

    更新

    感谢您发布ssh -vvv的输出。 在这种情况下,从-vvv和只有-v的额外冗长是有帮助的。 debugging输出告诉我,X11转发正确设置:

     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的方式上,本地方面仍然存在一个configuration错误。 在许多系统上, DISPLAY的默认值是:0.0 ,而不是:0 。 您是否在调用ssh命令之前手动设置DISPLAY的值?

    有关本地系统的更多信息以及如何调用ssh命令在这一点上将会很有帮助。

    • 请提供您的Linux发行版和版本号。
    • 你是否使用默认的GNOME或KDE环境来进行X或者你自己定制的其他东西?
    • 你是从terminal窗口直接在命令行上调用ssh吗?
    • 你在用什么terminal? xterm,gnome-terminal还是?
    • 你是怎么开始在X环境下运行的terminal的? 从菜单? 热键? 要么 ?
    • 你可以从ssh -X失败的terminal窗口运行xeyes吗?
    • 你是否以与loginX会话的用户相同的方式调用ssh命令?

    这最后一个项目是重要的。 如果你以另一个用户的身份运行ssh(例如,如果你打开了一个根terminal窗口而不是用户terminal窗口),那么即使你明确地设置了DISPLAY=:0 ,你也会遇到这个问题,没有权限连接到X服务器默认为另一个用户(甚至作为根!)

    你的configuration似乎没问题,但是按照Agemen的build议,尝试使用“ssh -X home”。

    另外,如果一切都失败了,试试这个:

    在你下class回家之后,在“home”上键入:

     xauth list 

    然后,在“工作”上键入

     xauth 

    这会给你一个“xauth>”的提示。 从这里input“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> 

    让我们知道

    如果您想在本地显示器( work )上显示远程应用程序,或者要在远程系统( home屏幕)上显示远程应用程序,我不太清楚。

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

    在第二种情况下,你需要使用xhost的系统是home ,这是不够的,你也需要导出显示variables。

     xhost +work export DISPLAY=:0.0 

    我并不完全确定你想要做什么…因为我不知道你的系统和我的系统有什么区别,另一方面是你需要的确切configuration我不是专家^ _ ^)。 希望它能在某些方面帮助你,因为这些configuration对我来说也是合适的。