Windows上SSH连接Ubuntu失败
当你在Windows上尝试SSH连接Ubuntu,命令为:ssh username@<Ubuntu的IP>
此时出现 "The connection was refused by the computer" 错误,通常意味着目标计算机(Ubuntu)拒绝了连接请求。以下是逐步排查和解决方案:
1. 快速检查清单
可能原因 | 检查方法 | 解决方案 |
---|---|---|
SSH服务未运行 | sudo systemctl status ssh | 启动服务:sudo systemctl start ssh |
防火墙拦截 | sudo ufw status | 放行SSH:sudo ufw allow 22 |
SSH监听配置错误 | ss -tulnp | grep ssh | 修改/etc/ssh/sshd_config |
IP地址或端口错误 | ip a 查看Ubuntu IP | 确认连接命令:ssh user@正确IP |
Windows防火墙阻止 | Test-NetConnection <IP> -Port 22 | 放行Windows防火墙 |
2. 详细解决方案
(1) 确认Ubuntu的SSH服务已启动
在Ubuntu终端执行:
sudo systemctl status ssh
若未运行:
sudo systemctl start ssh sudo systemctl enable ssh # 设置开机自启
若报错:可能需要安装SSH服务:
sudo apt update && sudo apt install openssh-server
(2) 检查SSH端口监听状态
ss -tulnp | grep ssh
正常输出应类似:
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=123,fd=3))
如果监听的是127.0.0.1:22
,需修改配置:
sudo nano /etc/ssh/sshd_config
找到并修改:
ListenAddress 0.0.0.0 # 允许所有IP访问 Port 22 # 确保端口是22
重启服务:
sudo systemctl restart ssh
(3) 关闭Ubuntu防火墙(临时测试)
sudo ufw disable
如果关闭后能连接,则需永久放行SSH:
sudo ufw allow 22 sudo ufw enable
(4) 检查Windows防火墙
-
方法1:临时关闭防火墙(不推荐长期使用):
netsh advfirewall set allprofiles state off
-
方法2:放行SSH端口:
netsh advfirewall firewall add rule name="SSH" dir=in action=allow protocol=TCP localport=22
(5) 验证网络连通性
-
在Windows上测试端口:
Test-NetConnection <Ubuntu的IP> -Port 22
如果显示TcpTestSucceeded: False
,说明网络或服务端问题。 -
使用Telnet测试(需启用Telnet客户端):
telnet <Ubuntu的IP> 22
正常应返回SSH版本信息(如SSH-2.0-OpenSSH_8.9p1
)。
3. 高级排查
(1) 检查SSH日志(Ubuntu端)
sudo tail -f /var/log/auth.log
在Windows尝试连接时,观察日志中的错误信息(如认证失败、IP拒绝等)。
(2) 更换SSH端口测试
修改Ubuntu的SSH端口(例如2222):
sudo nano /etc/ssh/sshd_config
修改:Port 2222
重启服务并放行新端口:
sudo systemctl restart ssh sudo ufw allow 2222
在Windows连接时指定端口:
ssh -p 2222 username@<Ubuntu的IP>
(3) 检查主机名解析问题
在Windows的hosts
文件中添加Ubuntu的IP和主机名:
notepad C:\Windows\System32\drivers\etc\hosts
添加行:192.168.1.100 ubuntu-hostname
然后尝试用主机名连接:
ssh username@ubuntu-hostname
4. 常见错误场景
错误现象 | 原因 | 解决方案 |
---|---|---|
Connection timed out | 网络不通/防火墙拦截 | 检查IP、端口、防火墙 |
Permission denied | 用户名/密码错误 | 确认用户名和密码 |
No route to host | IP地址错误 | 使用ip a 确认Ubuntu的IP |
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED | SSH密钥变更 | 删除~/.ssh/known_hosts 中对应条目 |
总结步骤
-
确认Ubuntu的SSH服务运行并监听
0.0.0.0:22
。 -
关闭防火墙临时测试(Ubuntu的
ufw
和Windows防火墙)。 -
使用
telnet
或Test-NetConnection
验证端口可达性。 -
如果仍失败,检查SSH日志和网络配置。
如果问题依旧,可能是路由器隔离了设备(如AP隔离),需检查路由器设置。