在不带-X的ssh到机器之后,是否可以更改$ DISPLAY以使其像ssh -X一样工作?


22

ssh没有-X机器的情况下,是否可以更改某些设置(例如$DISPLAY)使其工作ssh -X?如果没有,原因是什么?谢谢。


我建议通过省略来缩短问题标题change $DISPLAY to。当前的问题标题无法在搜索结果中完整显示,更改$ DISPLAY实际上是答案的一部分,而不是问题的一部分。
德米特里·格里戈里耶夫

Answers:


33

您可以在启用X11转发的情况下创建第二个连接,然后也可以DISPLAY在第一个连接中使用第二个连接中的环境变量。

在第一个窗口中:

$ ssh user@host
user@host$ ...

在第二个窗口中:

$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0

返回第一个窗口:

user@host$ export DISPLAY=localhost:10.0
user@host$ xterm

不幸的是,ssh没有任何东西可以包含对它启动的进程/会话或它在远程计算机上运行的用户的X11(或其他)转发(例如,通过使用带有/不带检查凭据的Unix套接字,或使用名称空间),这些转发是简单的tcp侦听套接字,远程计算机上的任何人都可以连接到该套接字。X11转发的所有安全性都依赖于X11身份验证。

X11手动转发

该手册sshd_config(5)页提到:

禁用X11转发不会阻止用户转发X11通信,因为用户始终可以安装自己的转发器。

这是您可以手动执行的操作。

首先,请确保禁用任何绕过x11身份验证机制[1]的基于主机或用户的访问控制:

$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect

然后显示DISPLAY=:0本地计算机上的身份验证信息:

$ xauth list :0
ohzd/unix:0  MIT-MAGIC-COOKIE-1  a86982ddce0c1e1c1a8c5e8b2846e43b

无需任何X11转发即可连接到远程计算机:

$ ssh user@hzy64
user@hzy64's password:
[motd snipped]

通过打开命令行,~C并从该端口6000+43向与display相对应的unix套接字添加远程转发:0

hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.

设置$DISPLAYenvvar并将身份验证信息从本地添加到远程计算机:

hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth:  file /home/user/.Xauthority does not exist

现在您可以开始了:

hzy64$ xterm

[1]由于错误的错误修正,默认情况下在Debian中通过开启基于用户的访问控制/etc/X11/Xsession.d/35x11-common_xhost-local。更糟糕的是,它是XWayland中默认情况下唯一无法关闭的功能。代理X11协议的任何程序(例如xscope)都必须进行自己的x11 auth cookie检查(以ssh的方式进行),除非它想给X11服务器打开一个漏洞。


1
如果您关心安全性,那-X会比稍微好一点-Y,不是吗?
Stephen Kitt

13
许多(大多数?)X11程序无法使用-X,只能使用-Y。人们不会注意到,因为在许多系统(例如debian)ForwardX11Trustedyes默认设置为,并且-Xand -Y选项是等效的;-)
mosvy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.