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隔离),需检查路由器设置。

相关推荐
XIAOHEZIcode11 小时前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
Web3探索者6 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
开发者联盟league13 天前
安装pnpm
ssh
qq_3692243313 天前
Windows全系通用!ntdll.dll文件丢失、报错、闪退问题的完整排查与修复教程
windows·dll·dll修复·dll丢失·dll错误
2601_9618752413 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
阿米亚波13 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
张飞飞飞飞飞13 天前
Tmux命令使用教程
linux·服务器·ubuntu
caimouse13 天前
Reactos 第 10 章 网络操作 — 10.3.1 NIC驱动
网络·windows
初圣魔门首席弟子13 天前
Node.js 详细介绍(知识库版)
windows·qt·node.js·知识库
CHENG-JustDoIt13 天前
AI工具 | 爆火开源项目Odysseus AI 工作台:从项目介绍、部署情况及其使用等多方位分析指南(含详细步骤)
大数据·人工智能·windows·python·ai·开源·github