Ruc*_*t88 4 ssh xorg xforwarding openssh
我遇到了大多数人似乎都遇到的相反问题。如果我在登录 ssh 时启动 X 应用程序,它会显示在服务器(主机)机器上,而不是客户端(本地)机器上。这是我使用的命令
$ ssh -X -p 6623 pinker@192.168.0.200
Run Code Online (Sandbox Code Playgroud)
我的 $DISPLAY 变量在客户端上显示正确。
$ echo $DISPLAY
:0
Run Code Online (Sandbox Code Playgroud)
我希望来自服务器的 X 应用程序在客户端(我实际所在的机器)上本地显示。我不知道是什么原因造成的。
为了这个对话,假设有 2 台名为lappy和 的机器remotey。该lappy系统是在那里你会运行您ssh的命令。您要连接的系统是remotey.
lappy .-,( ),-.
__ _ .-( )-. remotey
[__]|=| ---->( network )------> ____ __
/::/|_| '-( ).-' | | |==|
'-.( ).-' |____| | |
/::::/ |__|
NOTE: on lappy, `ssh` to remotey, run GUI, see GUI on lappy
Run Code Online (Sandbox Code Playgroud)
您的 shell 的配置文件可能正在设置环境变量DISPLAY=:0。你可以像这样 grep :
$ grep DISPLAY $HOME/{.bash*,.profile*}
Run Code Online (Sandbox Code Playgroud)
如果这没有返回任何内容,那么您登录的系统可能是罪魁祸首。也看看这个目录。
$ grep DISPLAY /etc/profile.d/* /etc/bash*
Run Code Online (Sandbox Code Playgroud)
如果您只想保留它,您可以通过指示ssh将 X 流量重定向回您的客户端系统来覆盖此行为,如下所示:
$ ssh -X user@remoteserver
Run Code Online (Sandbox Code Playgroud)
在这里,我有一个远程服务器,它已$DISPLAY设置为:0与您的类似。
$ ssh -X skinner "echo $DISPLAY"
:0
Run Code Online (Sandbox Code Playgroud)
但无论如何,我仍然可以调用 X 应用程序并将它们远程显示到我正在执行ssh命令的系统中。我什至不必登录,我可以像这样直接运行 GUI:
$ ssh -X skinner xeyes
Run Code Online (Sandbox Code Playgroud)
作为额外提示,您可能希望更改正在使用的密码,以帮助提高 X11 流量通过 SSH 隧道时的性能。
$ ssh -c arcfour,blowfish-cbc -X skinner xeyes
Run Code Online (Sandbox Code Playgroud)
lappy .-,( ),-.
__ _ .-( )-. remotey
[__]|=| ---->( network )------> ____ __
/::/|_| '-( ).-' | | |==|
'-.( ).-' |____| | |
/::::/ |__|
NOTE: on lappy, `ssh` to remotey, run GUI, see GUI on remotey
Run Code Online (Sandbox Code Playgroud)
如果您通过 SSH 进入remoteyfromlappy但不想让 GUI 显示在 上lappy,那么只需-X从您的ssh调用中删除开关即可。
$ ssh -p 6623 pinker@192.168.0.200
Run Code Online (Sandbox Code Playgroud)
很多时候,用户的$HOME/.ssh目录可能会引入关于正在发生的事情的未知数。config在执行测试时,您可以像这样暂时停止使用此目录中的文件。
$ ssh -F /dev/null -p 6623 pinker@192.168.0.200
Run Code Online (Sandbox Code Playgroud)
您可以使用以下测试暂时禁用 shell 的配置文件,remotey如下所示:
$ ssh -t -X -p 6623 pinker@192.168.0.200 "bash --norc --noprofile"
Run Code Online (Sandbox Code Playgroud)
有了上面的内容,任何设置都不应该被引入这个 Bash shell,所以你应该能够设置DISPLAY=:0然后将 GUI 显示到 remotey 的桌面。
您可以使用以下技巧来帮助隔离问题,首先删除--noprofile并尝试此命令:
$ ssh -t -X -p 6623 pinker@192.168.0.200 "bash --norc"
Run Code Online (Sandbox Code Playgroud)
然后跟着这个命令:
$ ssh -t -X -p 6623 pinker@192.168.0.200 "bash --noprofile"
Run Code Online (Sandbox Code Playgroud)
第一个版本会告诉您问题是否出在/etc/bashrc&$HOME/.bashrc配置文件链中,而第二个版本会告诉您问题是否出在$HOME/.bash_profile配置文件中。