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`
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中对应条目

总结步骤

  1. 确认Ubuntu的SSH服务运行并监听0.0.0.0:22

  2. 关闭防火墙临时测试 (Ubuntu的ufw和Windows防火墙)。

  3. 使用telnetTest-NetConnection验证端口可达性

  4. 如果仍失败,检查SSH日志和网络配置。

如果问题依旧,可能是路由器隔离了设备(如AP隔离),需检查路由器设置。

相关推荐
Molesidy2 小时前
【UAV】基于PX4+Ubuntu24.04.3的无人机制作的开发环境搭建
ubuntu·无人机·px4·gazebo·uav
JCGKS2 小时前
Docker|“ssh: connect to host xxx.xxx.xxx.xxx port 8000: Connection refused“问题解决
docker·ssh·端口·listen·tcp三次握手
fengfuyao9853 小时前
诊断并修复SSH连接Github时遇到的“connection closed“错误
运维·ssh·github
高旭的旭3 小时前
Gitlab 配置自定义 clone 地址
svn·ssh·gitlab·code
绿箭柠檬茶5 小时前
Ubuntu 使用 Samba 共享文件夹
linux·运维·ubuntu
你是人间五月天5 小时前
sentinel实现控制台与nacos数据双向绑定
windows·sentinel
小猫挖掘机(绝版)7 小时前
通过tailscale实现一台电脑上vscode通过ssh连接另一台电脑上的VMware Linux 虚拟机
linux·windows·vscode·ubuntu·ssh
方先森有点懒8 小时前
CentOS 7.2 虚机 ssh 登录报错在重启后无法进入系统
linux·运维·centos·ssh
剑客的茶馆8 小时前
新服务器从0开始搭配Ubuntu+Conda+Docker+Dify
服务器·ubuntu·docker·conda·dify
喜欢你,还有大家10 小时前
SSH服务远程安全登录
运维·安全·ssh