在ssh
没有-X
机器的情况下,是否可以更改某些设置(例如$DISPLAY
)以使其工作ssh -X
?如果没有,原因是什么?谢谢。
您可以在启用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身份验证。
该手册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.
设置$DISPLAY
envvar并将身份验证信息从本地添加到远程计算机:
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服务器打开一个漏洞。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句