Tim Asked: 2019-03-11 05:34:05 +0800 CST2019-03-11 05:34:05 +0800 CST 2019-03-11 05:34:05 +0800 CST 在没有 -X 的 ssh 到机器之后,是否可以更改 $DISPLAY 以使其像 ssh -X 一样工作? 772 ssh没有机器后-X,是否可以更改某些设置(例如$DISPLAY)以使其工作ssh -X?如果不是,原因是什么?谢谢。 ssh x11 1 个回答 Voted Best Answer mosvy 2019-03-11T06:37:17+08:002019-03-11T06:37:17+08:00 您可以在启用 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然后在本地机器上显示 auth 信息: $ 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 服务器打开一个大洞。
您可以在启用 X11 转发的情况下创建第二个连接,然后您还可以在第一个连接中使用
DISPLAY
第二个连接中的环境变量。在第一个窗口中:
在第二个窗口中:
回到第一个窗口:
不幸
ssh
的是,没有包含 X11(或其他)转发到它启动的进程/会话或它在远程机器上运行的用户(例如,通过使用带有/不检查凭据的 Unix 套接字,或通过使用命名空间),这些转发是简单的 tcp 监听套接字,远程机器上的任何人都可以连接到它;X11 转发的所有安全性都依赖于 X11 身份验证。X11 手动转发
sshd_config(5)
手册页提到:这是您可以手动执行此操作的方法。
首先,确保禁用任何绕过 x11 身份验证机制的基于主机或用户的访问控制 [1]:
DISPLAY=:0
然后在本地机器上显示 auth 信息:在没有任何 X11 转发的情况下连接到远程机器:
通过打开命令行
~C
并添加从端口6000+43
到与 display 对应的 unix 套接字的远程转发:0
:设置
$DISPLAY
envvar 并将身份验证信息从本地添加到远程计算机:现在你准备好了:
[1] 由于错误修正,基于用户的访问控制在 Debian 中默认打开通过
/etc/X11/Xsession.d/35x11-common_xhost-local
. 更糟糕的是,它是 XWayland 中唯一一个默认情况下也无法关闭的选项。任何代理 X11 协议的程序(例如xscope
)都必须进行自己的 x11 auth cookie 检查(就像 ssh 所做的那样),除非它想为 X11 服务器打开一个大洞。