RHEL6上ssh -X打不开图形化窗口(Remote: No xauth program; cannot forward with spoofing.)

本文探讨了在远程服务器上遇到图形界面无法打开的问题,通过安装xauth包解决了连接拒绝错误,最终成功在远程服务器上使用图形界面。
[root@localhost ~]# lsb_release -a
LSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 6.0 (Santiago)
Release: 6.0
Codename: Santiago

254装了图形化,168默认没装图形化,254 ssh -X到168,发现打不开图形界面,发现原因竟是168上少装了一个xauth的包。


strace xhost发现报如下错:

strace xhost +
...
connect(3, {sa_family=AF_INET, sin_port=htons(6000), sin_addr=inet_addr("10.100.0.254")}, 16) = -1 ECONNREFUSED (Connection refused)

...


ssh -vvv发现是xauth的问题:
ssh 10.100.0.168 -X -vvv
...
debug3: Wrote 512 bytes for a total of 2005
debug1: Remote: No xauth program; cannot forward with spoofing.
debug2: channel_input_status_confirm: type 99 id 0
...


安装xauth:

yum install xauth -y


再次-X登陆,注意最后一行,xauth在用户家目录下创建了一个.Xauthority的文件:

[root@401x Desktop]# ssh 10.100.0.168 -X
root@10.100.0.168's password:
Last login: Sun Aug 19 21:05:08 2012 from 10.100.0.254
/usr/bin/xauth: creating new authority file /root/.Xauthority

发现已经可以打开图形界面:

[root@localhost ~]# xclock
Warning: Missing charsets in String to FontSet conversion


回过头来看下ssh -vvv:

ssh 10.100.0.168 -X -vvv
...
debug3: Wrote 128 bytes for a total of 1381
debug2: callback start
debug2: x11_get_proto: /usr/bin/xauth list :0.0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 0: request x11-req confirm 0
...

原本以为是xhost和DISPLAY变量设置的问题,结果发现与二者没有任何关系。

装了xauth后,168上的DISPLAY如下,xhost和DISPLAY变量都未做任何改动。

[root@localhost ~]# echo $DISPLAY
localhost:10.0


REF:

1. xhost doesn't work

http://forums.gentoo.org/viewtopic-t-424675-start-0.html

2. No xauth Program; Cannot Forward With Spoofing Error and Solution

http://www.cyberciti.biz/faq/linux-unix-appleosx-noxauth-program-cannot-forward-with-spoofing/

[17:19:01.210] Log Level: 2 [17:19:01.220] SSH Resolver called for "ssh-remote+127.0.1.1", attempt 1 [17:19:01.223] remote.SSH.useLocalServer = true [17:19:01.223] remote.SSH.useExecServer = true [17:19:01.223] remote.SSH.bindHost = {} [17:19:01.223] remote.SSH.path = [17:19:01.223] remote.SSH.configFile = [17:19:01.223] remote.SSH.useFlock = true [17:19:01.223] remote.SSH.lockfilesInTmp = false [17:19:01.223] remote.SSH.localServerDownload = auto [17:19:01.224] remote.SSH.remoteServerListenOnSocket = false [17:19:01.224] remote.SSH.defaultExtensions = [] [17:19:01.224] remote.SSH.defaultExtensionsIfInstalledLocally = [] [17:19:01.224] remote.SSH.loglevel = 2 [17:19:01.224] remote.SSH.enableDynamicForwarding = true [17:19:01.224] remote.SSH.enableRemoteCommand = false [17:19:01.224] remote.SSH.serverPickPortsFromRange = {} [17:19:01.224] remote.SSH.serverInstallPath = {} [17:19:01.224] remote.SSH.permitPtyAllocation = false [17:19:01.224] remote.SSH.preferredLocalPortRange = undefined [17:19:01.224] remote.SSH.useCurlAndWgetConfigurationFiles = false [17:19:01.224] remote.SSH.experimental.chat = true [17:19:01.224] remote.SSH.experimental.enhancedSessionLogs = true [17:19:01.224] remote.SSH.httpProxy = {"*":""} [17:19:01.224] remote.SSH.httpsProxy = {"*":""} [17:19:01.231] VS Code version: 1.102.3 [17:19:01.231] Remote-SSH version: remote-ssh@0.120.0 [17:19:01.231] linux x64 [17:19:01.233] SSH Resolver called for host: 127.0.1.1 [17:19:01.233] Setting up SSH remote "127.0.1.1" [17:19:01.236] Acquiring local install lock: /tmp/vscode-remote-ssh-23c6a5dd-install.lock [17:19:01.237] Looking for existing server data file at /home/ubuntuworld/.config/Code/User/globalStorage/ms-vscode-remote.remote-ssh/vscode-ssh-host-23c6a5dd-488a1f239235055e34e673291fb8d8c810886f81-0.120.0-es/data.json [17:19:01.237] No existing data file [17:19:01.238] Using commit id "488a1f239235055e34e673291fb8d8c810886f81" and quality "stable" for server [17:19:01.238] Extensions to install: [17:19:01.240] Install and start server if needed [17:19:01.242] PATH: /opt/ros/noetic/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin [17:19:01.242] Checking ssh with "ssh -V" [17:19:01.246] > OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 [17:19:01.249] askpass server listening on /run/user/1000/vscode-ssh-askpass-df933a953e2bc1cfcb9bb95d0bc0fecafad40ee3.sock [17:19:01.249] Spawning local server with {"serverId":1,"ipcHandlePath":"/run/user/1000/vscode-ssh-askpass-2285b44bb52479af6e1b8f50870389b6f1e7301c.sock","sshCommand":"ssh","sshArgs":["-v","-T","-D","43071","-o","ConnectTimeout=15","127.0.1.1"],"serverDataFolderName":".vscode-server","dataFilePath":"/home/ubuntuworld/.config/Code/User/globalStorage/ms-vscode-remote.remote-ssh/vscode-ssh-host-23c6a5dd-488a1f239235055e34e673291fb8d8c810886f81-0.120.0-es/data.json"} [17:19:01.249] Local server env: {"SSH_AUTH_SOCK":"/run/user/1000/keyring/ssh","SHELL":"/bin/bash","DISPLAY":":0","ELECTRON_RUN_AS_NODE":"1","SSH_ASKPASS":"/home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/local-server/askpass.sh","VSCODE_SSH_ASKPASS_NODE":"/usr/share/code/code","VSCODE_SSH_ASKPASS_EXTRA_ARGS":"","VSCODE_SSH_ASKPASS_MAIN":"/home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/askpass-main.js","VSCODE_SSH_ASKPASS_HANDLE":"/run/user/1000/vscode-ssh-askpass-df933a953e2bc1cfcb9bb95d0bc0fecafad40ee3.sock"} [17:19:01.252] Spawned 5361 [17:19:01.252] Using connect timeout of 17 seconds [17:19:01.298] > local-server-1> Running ssh connection command: ssh -v -T -D 43071 -o ConnectTimeout=15 127.0.1.1 [17:19:01.300] > local-server-1> Spawned ssh, pid=5370 [17:19:01.301] stderr> OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 [17:19:01.302] stderr> ssh: connect to host 127.0.1.1 port 22: Connection refused [17:19:01.302] > local-server-1> ssh child died, shutting down [17:19:01.304] Local server exit: 0 [17:19:01.304] Received install output: local-server-1> Running ssh connection command: ssh -v -T -D 43071 -o ConnectTimeout=15 127.0.1.1 local-server-1> Spawned ssh, pid=5370 OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 ssh: connect to host 127.0.1.1 port 22: Connection refused local-server-1> ssh child died, shutting down [17:19:01.304] WARN: $PLATFORM is undefined in installation script output. Errors may be dropped. [17:19:01.305] Failed to parse remote port from server output [17:19:01.307] Resolver error: Error at y.Create (/home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:744751) at t.handleInstallOutput (/home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:742832) at e (/home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:798600) at process.processTicksAndRejections (node:internal/process/task_queues:105:5) at async /home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:823806 at async t.withShowDetailsEvent (/home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:827501) at async /home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:795312 at async P (/home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:793367) at async t.resolveWithLocalServer (/home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:794864) at async A (/home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:820659) at async t.resolve (/home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:824898) at async /home/ubuntuworld/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:1113660 [17:19:01.310] ------ [17:19:01.311] No hints found in the recent session.什么原因?
最新发布
08-01
<think>嗯,用户遇到了VS Code Remote-SSH连接失败的问题,错误是"ssh: connect to host 127.0.1.1 port 22: Connection refused"。这个错误很典型,说明SSH服务本身没有响应。用户应该是在连接本地或局域网内的机器,但127.0.1.1这个地址有点特殊——它通常是Linux系统在/etc/hosts里给主机名设置的环回地址别名,和127.0.0.1等效。 用户可能已经尝试过基础排查,比如ping通但ssh连不上。从引用内容看,用户应该具备一定技术背景,但可能对Linux网络服务管理不熟悉。需要给ta系统性的排查方案,尤其要强调sudo权限的重要性——很多操作比如查看ssh服务状态、修改防火墙都需要root权限。 先聚焦最可能的三个原因:SSH服务未运行、防火墙拦截、配置错误。第一步必须确认sshd服务状态,因为"Connection refused"本质是TCP层拒绝,通常意味着目标端口根本没有监听。引用3提到ubuntu的类似案例,就是防火墙问题,但需要先排除服务未启动的情况。 端口检测部分要教用户两种方法:netstat和ss,因为不同Linux发行版默认工具可能不同。如果发现端口没监听,要引导用户检查sshd配置里的ListenAddress——用户用127.0.1.1连接,但sshd可能只监听了0.0.0.0或特定网卡。 防火墙部分要特别注意ufw和firewalld的区别,引用3的解决方案就是ufw。用户环境可能是Ubuntu,所以把ufw操作放在前面,但也要提firewalld避免误判。 最后要提醒密钥权限问题,虽然可能性较低,但引用4的密钥部署命令显示权限设置很关键。如果用户之前误操作过.ssh目录权限,会导致连接失败,这点要作为补充检查项。 用户可能会忽略地址配置问题,所以需要解释127.0.1.1和localhost的区别。如果用户实际想连其他IP,建议ta改用主机名或真实IP连接,避免环回地址的限制。 解决方案要按优先级排序:先服务状态→端口监听→防火墙→配置调整。每个步骤给出具体命令示例,特别是带sudo的命令要明确标注,避免用户遗漏权限。测试环节强调用终端ssh命令先验证,比在VS Code里反复试更高效。</think>遇到 `ssh: connect to host 127.0.1.1 port 22: Connection refused` 错误,表明 SSH 客户端无法与目标主机(此处是 `127.0.1.1`)的 SSH 服务端口(22)建立连接。这通常意味着目标主机上的 SSH 服务未运行、防火墙阻止了连接,或 SSH 服务未监听该特定地址。以下是详细排查和解决方法: --- ### 🔍 一、核心原因分析 1. **SSH 服务未运行**:目标主机未启动 `sshd` 服务。 2. **SSH 服务未监听 `127.0.1.1`**:SSH 配置可能只绑定到 `127.0.0.1` 或其他网卡 IP。 3. **防火墙拦截**:本地防火墙(如 `ufw` 或 `firewalld`)阻止了 22 端口的连接。 4. **网络配置问题**:`127.0.1.1` 是环回地址别名,可能配置异常。 5. **SSH 端口被修改**:服务端 SSH 端口非默认 22。 --- ### 🛠️ 二、解决方案(逐步排查) #### ✅ 步骤 1:检查 SSH 服务状态 在目标主机上执行: ```bash sudo systemctl status sshd # Ubuntu/Debian sudo systemctl status ssh # 部分系统 ``` - **若服务未运行**:启动服务并设置开机自启: ```bash sudo systemctl start sshd sudo systemctl enable sshd ``` #### ✅ 步骤 2:确认 SSH 监听地址 检查 SSH 服务绑定的 IP 地址: ```bash sudo netstat -tuln | grep ':22' ``` - **输出示例**: ```bash tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN # 监听所有地址(正常) tcp 0 0 127.0.0.1:22 0.0.0.0:* LISTEN # 仅监听本地环回(需修改) ``` - **若未监听 `0.0.0.0` 或 `127.0.1.1`**: 修改 `/etc/ssh/sshd_config`: ```bash sudo nano /etc/ssh/sshd_config ``` 确保存在以下配置: ```config # ListenAddress 0.0.0.0 # 取消注释以监听所有 IPv4 地址 # ListenAddress :: # 取消注释以监听所有 IPv6 地址 ``` 保存后重启服务: ```bash sudo systemctl restart sshd ``` #### ✅ 步骤 3:检查防火墙规则 - **Ubuntu/Debian(使用 `ufw`)**: ```bash sudo ufw status # 查看状态 sudo ufw allow ssh # 允许 SSH(或 sudo ufw allow 22) sudo ufw reload # 重载规则 ``` - **CentOS/RHEL(使用 `firewalld`)**: ```bash sudo firewall-cmd --list-all # 查看规则 sudo firewall-cmd --add-service=ssh --permanent sudo firewall-cmd --reload ``` #### ✅ 步骤 4:验证 `127.0.1.1` 的连通性 在目标主机上测试本地连接: ```bash ssh username@127.0.1.1 # 替换为实际用户名 ``` - **若仍失败**:尝试改用 `localhost` 或 `127.0.0.1` 连接(VS Code 中修改主机地址)。 - **若成功**:说明 `127.0.1.1` 可能配置异常(检查 `/etc/hosts`)。 #### ✅ 步骤 5:检查 SSH 端口和配置 - **确认端口是否被修改**: 检查 `/etc/ssh/sshd_config` 中 `Port` 参数: ```config Port 22 # 确保为 22(或 VS Code 配置对应端口) ``` - **检查密钥权限**(若使用密钥登录): ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` --- ### 💡 三、VS Code 配置建议 1. **修改连接地址**: 在 VS Code 的 SSH 配置文件中(如 `~/.ssh/config`),将主机地址改为: ```config Host my_local_server HostName localhost # 或 127.0.0.1 User your_username Port 22 ``` 2. **重新连接**: 选择 `Remote-SSH: Connect to Host...` → 输入 `my_local_server`。 --- ### 📌 总结排查流程 ```mermaid graph TD A[连接失败] --> B{检查 SSH 服务状态} B -->|未运行| C[启动 sshd 服务] B -->|已运行| D{检查监听地址} D -->|未监听 127.0.1.1| E[修改 sshd_config] D -->|监听正常| F{检查防火墙} F -->|拦截| G[开放 22 端口] F -->|未拦截| H[测试本地 SSH 连接] H -->|成功| I[修改 VS Code 主机地址] H -->|失败| J[检查 /etc/hosts 或改用 127.0.0.1] ``` 通过以上步骤,99% 的 `Connection refused` 问题可解决。若问题持续,建议检查系统日志: ```bash journalctl -u sshd -b --no-pager # 查看 SSH 服务日志 ``` --- ### ❓相关问题 1. **如何为 SSH 服务配置密钥登录以提高安全性?** 2. **VS Code Remote-SSH 连接时出现“过程试图写入的管道不存在”错误如何解决?** 3. **Linux 系统中如何配置多网卡环境下的 SSH 监听策略?** 4. **如何通过修改 `sshd_config` 禁用 SSH 密码登录?** [^1]: 终端打印出来的主要错误就是ssh: connect to host localhost port 22: Connection refused,这里,其实可以自我检测一下,在服务器端输入以下命令 ssh localhost [^2]: VS Code使用Remote - SSH详解【以Windows连接Linux为例】。在WIndows端中,再次点击 VS Code 左下角的图标,选择 “Remote - SSH: Connect to Host...”,然后选择刚刚配置的主机名(如my_linux_server)。 [^3]: 中间甚至重装了vscode的remote-ssh插件 最后通过 sudo ufw allow ssh sudo ufw allow 22 sudo ufw enable sudo ufw status [^4]: VS Code Remote SSH配置。ssh yuzhenrong@192.168.88.131 “mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat ~/tmp.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && rm -f ~/tmp.pub”
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值