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

相关推荐
wuicer6 小时前
ubuntu 20.04 安装anaconda以及安装spyder
linux·运维·ubuntu
cpsvps_net7 小时前
美国服务器环境下Windows容器工作负载智能弹性伸缩
windows
甄超锋7 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
shuangrenlong9 小时前
ubuntu更新chrome版本
linux·chrome·ubuntu
cpsvps10 小时前
美国服务器环境下Windows容器工作负载基于指标的自动扩缩
windows
网硕互联的小客服13 小时前
Apache 如何支持SHTML(SSI)的配置方法
运维·服务器·网络·windows·php
etcix13 小时前
implement copy file content to clipboard on Windows
windows·stm32·单片机
基于python的毕设13 小时前
C语言栈的实现
linux·c语言·ubuntu
许泽宇的技术分享13 小时前
Windows MCP.Net:基于.NET的Windows桌面自动化MCP服务器深度解析
windows·自动化·.net
非凡ghost14 小时前
AMS PhotoMaster:全方位提升你的照片编辑体验
windows·学习·信息可视化·软件需求