我有一个 GUI 程序,它具有在租用的 Ubuntu 主机上运行所需的所有库,但主机本身拒绝在 ssh 连接期间使用 -X 设置 X 转发的尝试。strace
显示UI程序可以运行,但在没有DISPLAY时停止。我没有租用主机的 root 访问权限,它没有配置为普通用户转发 X11,并且该主机的支持表示他们不支持用户。
有没有办法进行 X 转发,因为我只需要一个关键程序?ssh -X -v
只是报告:
OpenSSH_7.2p2 Ubuntu-4ubuntu2.4, OpenSSL 1.0.2g 1 Mar 2016
...
debug1: Remote: /usr/home/ipdb/.ssh/authorized_keys:2: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
debug2: x11_get_proto: /usr/bin/xauth list unix:10.0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 0: request x11-req confirm 1
...
X11 forwarding request failed on channel 0
鉴于本地和远程主机都位于防火墙后面(因此 DISPLAY=$REMOTEHOST:0 不起作用),有什么方法可以手动配置它吗?该主机具有我从相同 dist 版本的 Ubuntu 主机复制的 xauth 和 xhost。
~/.ssh/rc 在连接期间运行,但没有传递任何参数。
我怀疑主机上不存在对 /usr/bin/xauth 的引用,这是问题所在吗?我可以运行自己的 sshd 并使用正确的 xauth 路径配置它吗?
答案1
按照各种指南,我将文件复制/etc/ssh/sshd_config
到新目录,然后在同一目录中运行以下命令来创建新的密钥对:
ssh-keygen -f myrsa -N ''
我从类似的 Linux 系统复制了 xauth 可执行文件并将其放在同一目录中。
然后我使用以下几行修改了 sshd_config 文件:
Port 22220
HostKey /path/to/directory/myrsa
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
XAuthLocation /path/to/directory/xauth
我现在可以使用以下命令在端口 22220 上启动启用了 X 转发的 ssh 服务器:
/usr/sbin/sshd -d -D -f /path/to/directory/sshd_config
并使用 ssh 命令连接到它:
ssh -X -p 22220 <hostname>
连接后,我检查环境变量 DISPLAY 是否已设置。
为了在该主机上运行我的 X 程序,我还需要从安装了 X 支持的类似 Linux 系统将几个库文件(例如 libxkbfile.so.1)复制到同一目录中;我通过在ldd
我尝试运行的 X 程序上运行来确定这一点,查找未解析的库,然后我在工作系统上找到它们,ldconfig -p | fgrep libxkbfile.so.1
并使用 scp 将它们复制到目标系统。然后我设置
set LD_LIBRARY_PATH=/path/to/directory
这样就可以找到其他库,并且能够运行 X 程序并查看本地系统上的 UI。