SSH(Secure Shell)是一种安全的远程登录协议,它可以让用户在不安全的网络中安全地连接到远程主机,也可以用于图像转发。当你使用 ssh -X
命令时,实际上是在启用 SSH 连接时开启了 X11 转发。X11 是用于 Unix 系统的标准图形用户界面,通过 ssh -X
,你可以在远程计算机上运行图形应用程序,并将其显示在本地计算机上。
远程图像显示
- 安全外壳连接:
- 当你运行
ssh -X user@remote_machine
时,你正在以指定用户身份建立到远程计算机的加密 SSH 连接。
- 当你运行
- X11 转发:
-X
选项告诉 SSH 启用 X11 转发。这意味着 X11 协议(用于图形应用程序)将通过安全的 SSH 连接进行隧道传输。
- 在本地计算机上显示:
- 在启用了 X11 转发的 SSH 连接之后,远程计算机上启动的任何图形应用程序的图形输出都将重定向到本地计算机的 X 服务器。
- 使用方法:
- 你可以在远程计算机上运行图形应用程序,就像在本地计算机上一样。例如:
ssh -X user@remote_machine登录到远程计算机所运行 xeyes
xeyes
应用程序将显示在本地计算机的图形环境中,但实际上是在远程计算机上运行的。
- 你可以在远程计算机上运行图形应用程序,就像在本地计算机上一样。例如:
- 好处:
- X11 转发允许你在远程服务器上使用图形应用程序,即使服务器本身没有图形环境或显示设备。这对于远程位置的服务器或机器特别有用,你可能无法直接访问图形桌面。
- 安全性考虑:
- 尽管
ssh -X
提供了安全的 X11 流量转发方式,但确保你的 SSH 服务器配置为允许 X11 转发(在sshd_config
中设置X11Forwarding yes
),并确保你连接到一个可信赖的远程服务器。
- 尽管
在远程服务器上用Docker运行GUI程序
远程计算机上docker容器的图像也可以使用ssh -X进行显示。此时,整个数据连接实际为:
[应用程序]->[X11客户端]->[SSH服务端]->[SSH客户端]->[X11服务端]->[显示屏幕]
以时钟xarclock的docker为例,ssh -X user@remote_machine
远程登录服务器后,运行
docker run -e DISPLAY=$DISPLAY –net=host -v $HOME/.Xauthority:/root/.Xauthority xarclock
本地计算机就可以显示走动的时钟。因为SSH通道转发X11时,会生成一个随机的授权cookie,存放在服务器的.Xauthority文件中。这个cookie会在每次X11客户端发送数据时被用到,然而容器里面并没有这个授权文件。参数『-v $HOME/.Xauthority:/root/.Xauthority』是将宿主机的$HOME/.Xauthority映射到容器内的/root/.Xauthority,等于把授权文件也放到容器里面。使用了『–net=host』参数后,容器中的X11客户端将直接通过tcp套接字与外部通信。DISPLAY=$DISPLAY则是把容器内的显示端口映射到宿主机的显示端。
需要注意的是,为了使ssh -X正常工作,本地计算机必须运行 X 服务器。在 Linux 系统上,通常是这样的。在 Windows 上,你可能需要使用 X 服务器软件,如 Xming 或 VcXsrv。MobaXterm是一个集ssh和X服务器等远程登录服务为一体的计算机软件,使用起来十分方便。
0 条评论