xhost命令是X服务器的访问控制工具,用来控制哪些X客户端可以在X服务器上显示。该命令必须从有显示链接的机器上运行。能够经过使用-host参数,从访问列表中除去一个名称。不要从访问列表中除去当前的名称。若是已经这样作了,请在做出任何更改以前注销系统。服务器
xhost 是用来控制X server访问权限的。一般当你从hostA登录到hostB上运行hostB上的应用程序时,ide作为应用程序来讲,hostA是client,可是做为图形来讲,工具是在hostA上显示的,须要使用hostA的Xserver,因此hostA是serverserver.所以在登录到hostB前,须要在hostA上运行xhost +ip来使其它用户可以访问hostA的Xserver.it
+:关闭访问控制,容许任何主机访问本地的X服务器;
-:打开访问控制,仅容许受权清单中的主机访问本地的X服务器。class
xhost + ip使ip上的用户可以访问Xserver.cli
xhost + nis:user@domain使domain上的nis用户user可以访问权限
xhost + inet:user@domain使domain上的inet用户可以访问。
此时从A服务器登录B服务器,ssh -X hostB
可能会提示如下错误
“X11 forwarding request failed on channel 0”(X11 转发请求在通道0上失败)错误
原因是
出于安全原因,OpenSSH服务默认将X11转发请求绑定到本地回环地址上,并且在DISPLAY环境变量中将主机名设置为“localhost”。在这样的设定下,一些 X11客户端不能正确处理X11转发,这会导致报告中的错误
方案一
$ sudo vi /etc/ssh/sshd_config
X11Forwarding yes
X11UseLocalhost no
重启SSH使设置生效:
$ sudo /etc/init.d/ssh restart (Debian 6, Ubuntu or Linux Mint)
$ sudo systemctl restart ssh.service (Debian 7, CentOS/RHEL 7, Fedora)
$ sudo service sshd restart (CentOS/RHEL 6)
方案二
如果远程主机的SSH服务禁止了IPv6,那么X11转发失败的错误也有可能发生。要解决这个情况下的错误。打开/etc/ssh/sshd配置文件,取消对”AddressFamily all” (如果有这条的话)的注释。接着加入下面这行。这会强制SSH服务只使用IPv4而不是IPv6。(LCTT 译注:此处恐有误,AddressFamily 没有 all 这个参数,而 any 代表同时支持 IPv6和 IPv4,以此处的场景而言,应该是关闭IPv6支持,只支持 IPv4,所以此处应该是“注释掉 AddressFamily any”才对。)
$ sudo vi /etc/ssh/sshd_config
AddressFamily inet
重启SSH服务来完成设置