cygwin ssh :connection refused

本文详细介绍了如何在Cygwin环境下配置SSH服务器端,包括解决因磁盘格式为FAT32导致的权限问题,以及如何排除启动服务时遇到的各种错误。
想在本机上搭建Hadoop的伪分布式运行环境,需要配置SSH。

Cygwin安装的时候是带有OpenSSH的,之前会偶尔用他连接远程服务器。试了一下:

$ssh localhost

提示:ssh: connect to localhost port 22: Connection refused.

纳闷,怎么连自己不行?想了一会才明白,原来Cygwin的OpenSSH安装后,默认的client端开启,服务器端没有配置。

那就来安装sshd吧。

$ssh-host-config

本来一路输入yes就可以的,我这却不断提示/var目录下的一些目录访问属性不对,但是用chmod命令改却没有反应,网上查了一下,原来如果磁盘格式为FAT32的话,Cygwin的chmod将没有作用。

到Dos下用convert命令改:

convert D: /FS:NTFS

转换完成后,更改对应文件夹属性,SSH的服务器端终于安装好。

启动ssh server:

$cygrunsrv -S ssh

提示:cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062:

怎么搞得?

先重新安装一遍:

$cygrunsrv -R sshd

$ssh-host-config -y

还是不行。

上网查了一下,原来一般是一些需要访问的目录权限不对,天哪,一个个改太要命了,而且我也不清楚到底得改多少。。。都怪当初FAT32格式惹的祸。

索性把Cygwin重装了。

这次终于启动成功了。

试验自连:

$ssh localhost

成功!

用IP连接,失败了,提示:

ssh_exchange_identification: Connection closed by remote host

上网查了一下,说是/etc/hosts.allow和/etc/hosts.deny两个文件的问题,

打开看了看,觉得写的挺有歧义的,太烦了,全给注释掉了,再连,成功了!!

通过别的机器连接,也成功!


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/jlupaopao/archive/2008/08/21/2807056.aspx
好的,我们**专注解决核心问题**: > ❌ `Could not connect to localhost: Connection refused` 这个错误意味着:**你的 WSL 中的 GUI 程序试图连接图形显示服务器(X Server),但没有服务在目标地址上监听。** --- ## 🎯 根本原因总结 你看到 “Connection refused” 的本质是: ``` WSL (Linux) → 尝试连接 Windows 主机上的 X Server (VcXsrv) ↓ 没有服务在对应 IP:6000 上监听 ↓ Connection refused ``` 这通常由以下 **5 个常见原因**之一导致。 --- ## ✅ 解决方案:一步一步排查并修复 ### 🔧 前提条件确认 确保你已经安装了: - [x] VcXsrv([https://sourceforge.net/projects/vcxsrv/](https://sourceforge.net/projects/vcxsrv/)) - [x] 已经从 Windows 启动过一次 XLaunch - [x] WSL2 正常运行(`wsl` 能进入终端) --- ## ✅ 第一步:启动 VcXsrv 并正确配置 ⚠️ 很多人失败是因为 **只点了“运行”,但没选对选项** 👉 打开 **XLaunch** 或直接运行 `vcxsrv.exe`,按以下设置一步步来: | 配置项 | 必须选择 | |-------|--------| | Multiple windows | ✅ | | Display number | `0` | | Start no client | ✅ | | At startup: | Choose "Open a console window" or leave blank | | ✔️ Extra settings | **勾选 "Disable access control"** ← 关键! | | No native OpenGL | ✅ 推荐勾选(避免崩溃) | 点击 **Finish** 启动! ✅ 成功标志:右下角系统托盘出现一个 **蓝色 X 图标** 🔴 失败标志:程序闪退、无图标、或任务管理器看不到 `vcxsrv.exe` --- ## ✅ 第二步:检查 VcXsrv 是否真的在运行 打开 **Windows 任务管理器** → “进程”标签 → 查找: - `vcxsrv.exe` - 或 `XWinServer.exe` 🟢 如果存在 → 继续下一步 🔴 如果不存在 → 重新用 XLaunch 启动,并确保勾选了 “Disable access control” 💡 提示:你可以创建一个快捷方式保存配置,避免每次都手动点。 --- ## ✅ 第三步:获取正确的 DISPLAY 地址(不能用 localhost!) WSL2 是虚拟机,有自己的网络栈,所以 **不能使用 `localhost` 或 `127.0.0.1`**。 你需要把 X Server 指向 **Windows 主机的网关 IP**。 ### 在 WSL 中执行: ```bash export DISPLAY=$(ip route | awk '/^default/ { print $3 }'):0 echo $DISPLAY ``` 输出示例: ``` 172.18.144.1:0 ``` 📌 记住:格式必须是 `IP:0`,不是 `localhost:0`! > ⚠️ 错误写法: > ```bash > export DISPLAY=localhost:0 # ❌ 不通(回环不同) > export DISPLAY=127.0.0.1:0 # ❌ 同样不通 > ``` --- ## ✅ 第四步:测试能否连接到 VcXsrv 的 6000 端口 VcXsrv 监听 TCP 端口 `6000`(`:0` 对应 `6000`) 我们要测试 WSL 能否访问 Windows 上的 `6000` 端口。 ### 安装 telnet(如果还没装) ```bash sudo apt update && sudo apt install -y telnet ``` ### 获取 Windows 网关 IP 并测试连接 ```bash WIN_IP=$(ip route | awk '/^default/ { print $3 }') telnet $WIN_IP 6000 ``` 🎯 正确结果: ``` Trying 172.18.144.1... Connected to 172.18.144.1. Escape character is '^]'. ``` 🟢 表示连接成功!说明网络通了 🔴 如果显示 `Connection refused` → VcXsrv 没运行 或 防火墙拦截 --- ## ✅ 第五步:允许 VcXsrv 通过防火墙(关键!) Windows 防火墙可能阻止外部连接(包括来自 WSL 的请求)。 ### 添加 VcXsrv 到防火墙白名单: 1. 打开 **控制面板 > 系统和安全 > Windows Defender 防火墙** 2. 点击左侧 **“允许应用通过防火墙”** 3. 点击 **“更改设置”**(需要管理员权限) 4. 找到 `VcXsrv` 或 `XWinServer` 5. ✅ 勾选“专用”和“公用” 如果没有,请点击 **“允许其他应用”** → 浏览添加: ``` C:\Program Files\VcXsrv\vcxsrv.exe ``` 然后重启 VcXsrv。 --- ## ✅ 第六步:运行测试 GUI 应用 现在一切就绪,运行一个简单的 GUI 程序验证: ```bash # 安装测试工具 sudo apt install -y x11-apps # 设置 DISPLAY(再次确认) export DISPLAY=$(ip route | awk '/^default/ { print $3 }'):0 # 运行数字时钟 xclock -digital ``` 🎯 成功表现: - Windows 桌面弹出一个数字时钟窗口 - 时间正常刷新 🎉 恭喜!你现在可以运行任何 Linux GUI 应用,包括你的 Tauri `AppRun` --- ## 🛠️ 自动化脚本:一键诊断 + 修复 保存为 `~/gui-test.sh`: ```bash cat > ~/gui-test.sh << 'EOF' #!/bin/bash set -e echo "🔍 正在检测 WSL GUI 连接状态..." # 获取网关 IP WIN_IP=$(ip route | awk '/^default/ { print $3 }') if [ -z "$WIN_IP" ]; then echo "❌ 无法获取 Windows 网关 IP" exit 1 fi echo "🌐 Windows IP: $WIN_IP" # 设置 DISPLAY export DISPLAY=${WIN_IP}:0 echo "🖥️ DISPLAY=$DISPLAY" # 关闭访问控制(允许连接) if ! xhost + > /dev/null 2>&1; then echo "🟡 注意:xhost + 失败(可能未安装 x11-xserver-utils)" fi # 测试端口连通性 if nc -z $WIN_IP 6000; then echo "✅ 端口 6000 开放(VcXsrv 正在运行)" else echo "❌ 连接被拒绝:请检查 VcXsrv 是否运行且防火墙已放行" echo "💡 提示:启动 VcXsrv 并勾选 'Disable access control'" exit 1 fi # 尝试运行 xclock if ! command -v xclock > /dev/null; then echo "📦 安装测试包 x11-apps..." sudo apt update && sudo apt install -y x11-apps fi echo "🚀 正在启动 xclock..." xclock -digital || echo "⚠️ xclock 启动失败(但可能是正常退出)" EOF # 添加可执行权限 chmod +x ~/gui-test.sh ``` 以后只需运行: ```bash ~/gui-test.sh ``` 即可自动诊断问题。 --- ## 🧩 常见陷阱汇总 | 错误做法 | 正确做法 | |--------|--------| | `export DISPLAY=localhost:0` | ✅ `export DISPLAY=$(ip route...):0` | | 没有勾选 “Disable access control” | ✅ 必须勾选 | | 防火墙阻止 vcxsrv.exe | ✅ 添加到防火墙白名单 | | 使用旧版 Cygwin/X | ❌ 改用 VcXsrv | | 多个 VcXsrv 实例冲突 | ✅ 全部关闭后重开一个 | --- ## ✅ 总结:你现在要做的清单 | 步骤 | 操作 | |------|------| | 1 | ✅ 启动 VcXsrv,使用 XLaunch,勾选 **Disable access control** | | 2 | ✅ 设置 `export DISPLAY=<gateway_ip>:0`(不是 localhost) | | 3 | ✅ 把 `vcxsrv.exe` 加入 Windows 防火墙白名单 | | 4 | ✅ 在 WSL 中运行 `telnet <win_ip> 6000` 测试连接 | | 5 | ✅ 安装 `x11-apps` 并运行 `xclock -digital` 验证 | 只要完成以上五步,你就不会再看到: ``` Could not connect to localhost: Connection refused ``` 而是看到: 🎉 **GUI 应用窗口成功弹出!** ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值