我知道
-X
选项启用了SSH中的X11转发,但是我感觉缺少一些步骤。通过SSH将X从Ubuntu计算机转发到Fedora的必要步骤?#1 楼
需要在客户端和服务器端都启用X11转发。在客户端,
-X
的ssh
(大写X)选项启用X11转发,您可以将其设置为默认值(对于所有连接或特定连接),请在ForwardX11 yes
中使用~/.ssh/config
。在服务器端,必须在
X11Forwarding yes
中指定/etc/ssh/sshd_config
。请注意,默认设置为不转发(某些发行版在其默认设置/etc/ssh/sshd_config
中将其打开),并且用户无法覆盖此设置。必须在服务器端安装
xauth
程序。如果那里有X11程序,则很有可能xauth
在那里。在不太可能的情况下,将xauth
安装在非标准位置,可以通过~/.ssh/rc
(在服务器上!)调用它。请注意,您不需要在服务器上设置任何环境变量。
DISPLAY
和XAUTHORITY
将自动设置为适当的值。如果运行ssh且未设置DISPLAY
,则表示ssh没有转发X11连接。要确认ssh正在转发X11,请检查
Requesting X11 forwarding
输出中是否包含ssh -v -X
的行。请注意,服务器不会以任何方式答复,这是对潜在攻击者隐藏详细信息的安全预防措施。评论
@user:不,您永远不需要xhost +。当将计算机连接到网络意味着您值得信赖时,xhost属于一个比较温和的时代。 xhost +意味着任何可以欺骗您IP的人都可以控制您的X服务器会话。 ssh -X将设置所有必需的授权。如果在服务器配置中禁用了X11转发,请与管理员联系。如果不起作用,请参阅服务器配置不允许的通过SSH转发X11。
–吉尔斯'所以-不再是邪恶的'
2011年5月6日22:52
感谢您提及xauth!在准系统服务器上缺少该功能给我造成了麻烦。
–vasi
13年4月9日在6:53
+1用于在同一位置区分〜/ .ssh / config和/ etc / ssh / sshd_config。我不知道它们是否是不同的文件,或者仅仅是命名上的变化。
– puk
13年13月13日在7:48
@KhurshidAlam服务器是否也正在运行GUI环境并不重要。检查.Xauthority文件的权限。如果将Red Hat或其他系统与SELinux一起使用,请检查SELinux上下文,请参见unix.stackexchange.com/questions/36540/…
–吉尔斯'所以-不再是邪恶的'
2014年1月6日,12:30
在ssh -X之后,运行xterm&以获得图形终端作为最终测试,以查看其是否正常运行。
–亚历山大·泰勒(Alexander Taylor)
2014年5月29日17:18
#2 楼
要使ssh上的X11转发能够正常运行,您需要做三件事。您的客户端必须设置为转发X11。
您的服务器必须设置为允许X11转发。
您的服务器必须能够设置X11身份验证。
如果同时拥有#1和#2但缺少#3,那么最终带有一个空的DISPLAY环境变量。
从头开始,这是X11转发工作的方法。
在您的服务器上,确保/ etc / ssh / sshd_config包含:
X11Forwarding yes
X11DisplayOffset 10
您可能需要SIGHUP sshd,以便它接受这些更改。
cat /var/run/sshd.pid | xargs kill -1
在服务器上,确保已安装xauth。
belden@skretting:~$ which xauth
/usr/bin/xauth
如果未安装xauth,则将遇到“空的DISPLAY环境变量”问题。
在您的客户端上,连接到服务器。一定要告诉ssh允许X11转发。我更喜欢
belden@skretting:~$ ssh -X blyman@the-server
,但是您可能会喜欢
belden@skretting:~$ ssh -o ForwardX11=yes blyman@the-server
,或者您可以进行设置在您的〜/ .ssh / config中。
今天早些时候,当我进入一个我不管理的新服务器时,我遇到了这个空的DISPLAY环境变量。跟踪缺少的xauth部分很有意思。这就是我所做的事情,以及您可以做的事情。
在我是管理员的本地工作站上,我验证了/ etc / ssh / sshd_config已设置为转发X11。当我将ssh -X返回本地主机时,确实可以正确设置我的DISPLAY。
强迫DISPLAY取消设置并不难。我只需要查看sshd和ssh在做什么才能正确设置它。这是我一路走来的全部输出。
blyman@skretting:~$ mkdir ~/dummy-sshd
blyman@skretting:~$ cp -r /etc/ssh/* ~/dummy-sshd/
cp: cannot open `/etc/ssh/ssh_host_dsa_key' for reading: Permission denied
cp: cannot open `/etc/ssh/ssh_host_rsa_key' for reading: Permission denied
我没有使用sudo强制将ssh_host_ {dsa,rsa} _key文件复制到位,而是使用了ssh-keygen为自己创建虚拟对象。
blyman@skretting:~$ ssh-keygen -t rsa -f ~/dummy-sshd/ssh_host_rsa_key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/blyman/dummy-sshd/ssh_host_rsa_key.
Your public key has been saved in /home/blyman/dummy-sshd/ssh_host_rsa_key.pub.
-t dsa反复冲洗:
blyman@skretting:~$ ssh-keygen -t dsa -f ~/dummy-sshd/ssh_host_dsa_key
# I bet you can visually copy-paste the above output down here
编辑〜/ dummy-sshd / sshd_config以指向正确的新ssh_host密钥文件。
# before
blyman@skretting:~$ grep ssh_host /home/blyman/dummy-sshd/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
# after
blyman@skretting:~$ grep ssh_host /home/blyman/dummy-sshd/sshd_config
HostKey /home/blyman/dummy-sshd/ssh_host_rsa_key
HostKey /home/blyman/dummy-sshd/ssh_host_dsa_key
以非分离模式在新端口上启动sshd:
blyman@skretting:~$ sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
sshd re-exec requires execution with an absolute path
很高兴,请更正该路径:
blyman@skretting:~$ /usr/sbin/sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
debug1: sshd version OpenSSH_5.5p1 Debian-4ubuntu6
debug1: read PEM private key done: type RSA
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: private host key: #0 type 1 RSA
debug1: read PEM private key done: type DSA
debug1: Checking blacklist file /usr/share/ssh/blacklist.DSA-1024
debug1: Checking blacklist file /etc/ssh/blacklist.DSA-1024
debug1: private host key: #1 type 2 DSA
debug1: setgroups() failed: Operation not permitted
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-p'
debug1: rexec_argv[2]='50505'
debug1: rexec_argv[3]='-f'
debug1: rexec_argv[4]='/home/blyman/dummy-sshd/sshd_config'
debug1: rexec_argv[5]='-d'
Set /proc/self/oom_adj from 0 to -17
debug1: Bind to port 50505 on 0.0.0.0.
Server listening on 0.0.0.0 port 50505.
debug1: Bind to port 50505 on ::.
Server listening on :: port 50505.
弹出一个新终端,并通过ssh进入端口本地50505:
blyman@skretting:~$ ssh -p 50505 localhost
The authenticity of host '[localhost]:50505 ([::1]:50505)' can't be established.
RSA key fingerprint is 81:36:a5:ff:a3:5a:45:a6:90:d3:cc:54:6b:52:d0:61.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:50505' (RSA) to the list of known hosts.
Linux skretting 2.6.35-32-generic #67-Ubuntu SMP Mon Mar 5 19:39:49 UTC 2012 x86_64 GNU/Linux
Ubuntu 10.10
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/
1 package can be updated.
0 updates are security updates.
Last login: Thu Aug 16 15:41:58 2012 from 10.0.65.153
Environment:
LANG=en_US.UTF-8
USER=blyman
LOGNAME=blyman
HOME=/home/blyman
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
MAIL=/var/mail/blyman
SHELL=/bin/bash
SSH_CLIENT=::1 43599 50505
SSH_CONNECTION=::1 43599 ::1 50505
SSH_TTY=/dev/pts/16
TERM=xterm
DISPLAY=localhost:10.0
Running /usr/bin/xauth remove unix:10.0
/usr/bin/xauth add unix:10.0 MIT-MAGIC-COOKIE-1 79aa9275ced418dd445d9798b115d393
查看那里的最后三行。我很幸运地设置了DISPLAY,并从/ usr / bin / xauth获得了这两行漂亮的代码。
从那里开始,把/ usr / bin / xauth移到/ usr / bin / xauth.old,与ssh断开连接并停止sshd,然后启动sshd并将ssh返回到localhost。
当/ usr / bin / xauth消失时,我没有看到DISPLAY反映在我的环境。
这里没有任何精彩的事情。通常,我很幸运地选择了一种明智的方法来尝试在本地计算机上重现此方法。
评论
哇,非常感谢您的回答。除了导出DISPLAY =:10外,我所做的一切都很好。我从没猜过这么多显示器。
– m3nda
15年10月31日在22:34
显示偏移为10! :D
– 41754
19年7月23日在20:07
#3 楼
请确保:您已在服务器上安装了
xauth
(请参阅:xauth info
/ xauth list
)。在服务器上,您的
/etc/ssh/sshd_config
文件包含以下行: X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
在客户端,您的
~/.ssh/config
文件具有以下行:Host *
ForwardAgent yes
ForwardX11 yes
在在客户端,您已经安装了X服务器(例如macOS:XQuartz; Windows:Xming)。然后,要使用SSH进行X11转发,您需要在
-X
命令中添加ssh
,例如ssh -v -X user@host
,然后通过以下方法验证您的
DISPLAY
不为空:echo $DISPLAY
然后使用ssh的详细参数(
-v
),检查是否有任何警告,例如debug1: No xauth program.
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
如果您遇到了如上所述的不可信X11,则请尝试改用
-Y
标志(如果您信任主机):ssh -v -Y user@host
请参阅:“警告:不可信的X11转发设置失败:未生成xauth密钥数据”是什么意思如果使用-X进行切换?
如果警告:没有xauth数据,则可以尝试生成新的
.Xauthority
文件,例如xauth generate :0 . trusted
xauth list
请参阅:创建/重建新的.Xauthority文件
如果警告与上面所述不同,请遵循其他线索。
评论
权威指南:客户端的配置标记了差异
–user2928048
17-2-16在11:47
和X11UseLocalhost否在服务器端
–user2928048
17年2月16日在12:00
是AllowAgentForwarding而不是ForwardAgent
–警报
6月14日0:10
#4 楼
解决方法是将此行添加到您的/etc/ssh/sshd_config
中:X11UseLocalhost no
https://joshua.hoblitt.com/rtfm/2013/04/how_to_fix_x11_forwarding_request_failed_on_channel_0/
评论
我有2个Ubuntu服务器。在一方面,我需要将其设置为是,另一方面,必须将其设置为否。我敢肯定有一个解释,但是两者都值得尝试。
– alfonx
15年8月19日在13:08
这个修复对我有用!
– rigon
16 Dec 12'在12:23
请说明您是否要将此设置放在服务器或客户端上
– Klik
18 Mar 9 '18 at 2:35
@Klik / etc / ssh / sshd_config在服务器上。 d代表守护程序-en.wikipedia.org/wiki/Daemon_(computing)-客户端通常不是守护进程。
– dijksterhuis
6月1日2:57
#5 楼
让Windows 10上的Ubuntu bash运行ssh -X
以在远程服务器上获得GUI环境。安装以下所有程序。在Window上,安装
Xming
。在终端上的Ubuntu上,使用sudo apt install
安装ssh xauth xorg
。sudo apt install ssh xauth xorg
第二个
转到包含
ssh_config
文件的文件夹,我的是/etc/ssh
。第三
以管理员身份编辑
ssh_config
(请使用sudo
)。在ssh_config
内部,删除#
,ForwardAgent
,ForwardX11
行中的哈希ForwardX11Trusted
,并将相应的参数设置为yes
。# /etc/ssh/ssh_config
Host *
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
Forth
在
ssh_config
文件中,删除#
和Port 22
前面的散列Protocol 2
,并在文件末尾添加新行以声明xauth文件的位置XauthLocation /usr/bin/xauth
,请记住编写您自己的xauth文件路径。 /> # /etc/ssh/ssh_config
# IdentifyFile ...
Port 22
Protocol 2
# Cipher 3des
# ...
# ...
...
...
GSSAPIDelegateCredentials no
XauthLocation /usr/bin/xauth
第五
现在,既然我们已经完成了
ssh_config
文件的编辑,请在离开编辑器时将其保存。现在转到文件夹~
或$HOME
,将export DISPLAY=localhost:0
附加到您的.bashrc
文件中并保存。# ~/.bashrc
...
...
export DISPLAY=localhost:0
最后
我们是差不多完成了。重新启动bash shell,打开
Xming
程序并使用ssh -X yourusername@yourhost
。然后享受GUI环境。ssh -X yourusername@yourhost
问题也在Windows的Ubuntu子系统中,并且链接位于
https:// gist.github.com/DestinyOne/f236f71b9cdecd349507dfe90ebae776
#6 楼
将X11UseLocalhost no
添加到/etc/ssh/sshd_config
并重新启动SSH服务器。如果没有显示,请检查xauth是否正确安装,然后重试。
RHE / CEntos没有有这个问题,这是Ubuntu的事情!
#7 楼
如果您要从Windows(10)到Linux系统执行SSH,请帮自己一个忙,并使用Putty之类的SSH客户端(常规ssh -X等不起作用)。步骤1:在Windows中安装XServer:示例XMing服务器(在localhost:0.0上监听)
步骤2:在腻子中启用X11转发
步骤3:连接到远程Linux服务器
确保Linux服务器中的所有条件都得到满足-是X11Forwarding是,并且按照答案https://unix.stackexchange.com/a/12772/121634
中的说明存在xauth
启动XClock并等待一分钟,以便显示在Windows机器中。
注意-如果您要从此Linux服务器连接到另一台服务器,并想将X11转发回Windows,则只需使用ssh -X连接到下一个链。
即
[Windows]腻子(带有X11forwarding)-> [服务器1](xclock可以工作)-> ssh -X [服务器2](xclock可以工作)
#8 楼
对我来说,问题出在/ tmp文件系统的nodev挂载选项中。X11需要在其中创建一个特殊文件。
因此,检查/ tmp文件系统的挂载选项是什么?为此使用单独的分区或磁盘。
评论
我想您可能想看看原问题的其他答案,花点时间思考一下您自己的答案在这些问题上的改进。
–user48669
14年6月19日在11:28
#9 楼
必须在SSH服务器上(在您的情况下为Ubuntu框中)的X11Forwarding
中设置sshd_config
,并且必须通过传递-X
选项或编辑ssh_config
文件以添加X11,以将X11转发给SSH客户端(您的Fedora框)。 ForwardX11
默认。评论
您还需要在远程计算机上安装xauth,否则x权限的东西将无法工作。
– Faheem Mitha
2011年5月6日18:22
设置DISPLAY怎么办?
– Shickadance先生
2011年5月6日18:36
如果启用了X11Forwarding并且客户端系统上存在xauth,则ssh将自动设置$ DISPLAY。
– Shadur
2011年5月6日18:58
@Shadur不适合我。当我导出DISPLAY =:10.0时可以使用,但不能。否则,它抱怨找不到0 :。也许这需要其他一些东西才能自动发生?
–cfr
17 Mar 6 '17 at 17:39
#10 楼
xauth
可以被锁定。 -b This option indicates that xauth should attempt to break any authority file locks before proceeding. Use this
option only to clean up stale locks.
使用
xauth -b
在我尝试将
ssh
插入的计算机上打破了对xauth
的锁定。发出ssh
之后注销xauth -b
会话,然后重新登录最终使我能够成功echo $DISPLAY
。在重新创建.Xauthority
之前一定要尝试一下#11 楼
要添加以前的出色答案(设置~/.ssh/config
并检查是否在客户端上设置了DISPLAY
环境变量,设置/etc/ssh/sshd_config
并在服务器上安装xauth
),还请确保在客户端上安装了xterm
,例如sudo apt-get install xterm
评论
我知道这很普遍,但是我遇到了问题。对于这个问题的明确答案将对许多人有所帮助。周围的许多示例似乎忽略了重要细节。阅读X11时要注意的一件事是,该术语有点奇怪。通常我们所坐的机器是客户端,而服务器是对我们来说是远程的机器。但是在X世界中,那是翻转的。我们所坐的机器正在根据远程机器的请求创建窗口和绘制形状。因此,发出绘制请求的远程计算机是“客户端”,为这些请求提供服务的本地计算机是“服务器”。