Ubuntu无法访问SSH服务通常由服务状态、防火墙、配置或网络问题导致,常见原因包括SSH服务未启动、防火墙规则阻拦、SSH配置文件错误(如端口或认证方式设置不当)及网络连接异常,解决方法可依次执行:检查并启动SSH服务(sudo systemctl start ssh && systemctl enable ssh)、开放SSH端口(sudo ufw allow 22)、校验配置文件语法(sudo sshd -t)并修正错误、排查网络连通性(如ping测试),按此步骤排查,多数可快速恢复SSH访问。
SSH(Secure Shell)是Linux系统中远程管理服务器的核心工具,通过加密传输确保了远程操作的安全性,但在Ubuntu系统中,有时会遇到“无法访问SSH服务”的问题——无论是从本地局域网还是公网连接,均提示“Connection refused”“Connection timed out”或“Permission denied”等错误,本文将系统梳理导致该问题的常见原因,并提供针对性的解决步骤,帮助你快速恢复SSH访问。
问题初定位:确认“无法访问”的具体表现
在排查前,先明确错误类型:
- 连接被拒绝(Connection refused):说明目标端口未开放或服务未运行;
- 连接超时(Connection timed out):可能是网络不通、防火墙拦截或服务未启动;
- 权限被拒绝(Permission denied):多与认证配置(密码/密钥)或用户权限相关。
不同错误对应不同的排查方向,以下从基础到进阶逐步分析。

基础排查:SSH服务是否正常运行?
SSH服务未启动或崩溃是最常见的原因,通过以下步骤确认:
检查SSH服务状态
执行命令:
systemctl status ssh
- 如果显示“active (running)”,说明服务正在运行;
- 如果显示“inactive (dead)”,说明服务未启动;
- 如果显示“failed”,说明服务启动失败(需查看日志定位原因)。
启动SSH服务
若服务未运行,手动启动:
sudo systemctl start ssh
并设置开机自启,避免重启后再次失效:
sudo systemctl enable ssh
检查服务是否崩溃
若服务启动失败,查看详细日志:
sudo journalctl -u ssh -n 20 # 查看SSH服务的最近20条日志
常见错误包括:
- 配置文件语法错误(如
sshd_config格式问题); - 端口被占用(如22端口被其他服务占用);
- 权限问题(如SSH目录/文件权限不正确)。
进阶排查:SSH服务配置是否正确?
即使服务运行,错误的配置也可能导致外部无法访问,重点检查以下内容:
检查SSH监听地址和端口
SSH服务默认监听0.0.0:22(即所有IP地址的22端口),但配置文件可能修改了这一设置。
步骤:
编辑SSH主配置文件:
sudo nano /etc/ssh/sshd_config
检查以下关键参数:
Port:确认SSH端口是否为预期值(默认22,若修改过需确保客户端使用新端口);ListenAddress:确认是否监听外部IP(如0.0.0或168.1.100)。
常见问题:
- 若
ListenAddress设置为0.0.1,则仅允许本地连接(无法从外部访问); - 若端口被修改(如
Port 2222),需确保客户端连接时指定新端口(ssh -p 2222 user@ip)。
修改后保存文件,重启SSH服务:
sudo systemctl restart sshd
检查认证方式配置
SSH支持密码认证和密钥认证,若配置错误会导致“Permission denied”。
步骤:
在/etc/ssh/sshd_config中检查:
PasswordAuthentication:是否允许密码登录(默认为yes,若设为no则必须使用密钥);PubkeyAuthentication:是否允许密钥登录(默认为yes,建议保持开启);PermitRootLogin:root用户登录权限(默认为prohibit-password,即禁止root密码登录,仅允许密钥;若需root密码登录,需改为yes,但存在安全风险)。
示例:若想允许用户test通过密码登录,需确保:
PasswordAuthentication yes PermitRootLogin no # 禁止root直接登录(安全建议)
修改后重启SSH服务,并测试认证是否生效。
检查SSH目录和文件权限
SSH服务的正常运行依赖正确的文件权限,错误权限会导致服务拒绝启动或连接。
步骤:
检查SSH相关目录和权限:
sudo ls -l /etc/ssh/ # 查看SSH配置目录 sudo ls -l /etc/ssh/sshd_config # 查看主配置文件权限 sudo ls -l ~/.ssh/ # 查看用户SSH目录权限
正确权限:
/etc/ssh/:目录权限应为755(drwxr-xr-x);/etc/ssh/sshd_config:文件权限应为644(-rw-r--r--);- 用户
~/.ssh/目录:权限应为700(drwx------); - 用户
~/.ssh/authorized_keys(密钥认证文件):权限应为600(-rw-------)。
若权限错误,用chmod调整:
sudo chmod 755 /etc/ssh/ sudo chmod 644 /etc/ssh/sshd_config chmod 700 ~/.ssh/ chmod 600 ~/.ssh/authorized_keys
网络排查:防火墙与安全组是否拦截?
即使SSH服务正常运行,防火墙或云服务器安全组也可能阻止外部连接。
检查Ubuntu系统防火墙(ufw)
Ubuntu默认使用ufw(Uncomplicated Firewall)管理防火墙,若未放行SSH端口,外部连接会被拒绝。
步骤:
- 查看防火墙状态:
sudo ufw status
- 若防火墙已启用(“Status: active”),需放行SSH端口:
sudo ufw allow ssh # 默认放行22端口(若修改过端口,需用“sudo ufw allow 端口号”)
- 重启防火墙使规则生效:
sudo ufw reload
检查云服务器安全组(如阿里云、腾讯云)
若服务器部署在云平台(如阿里云ECS、腾讯云CVM),需检查“安全组”规则是否放行SSH端口。
步骤:
- 登录云平台控制台,进入“安全组”管理页面;
- 检入方向规则是否包含“SSH(22)”或自定义端口,且来源IP为“0.0.0.0/0”(允许所有IP)或指定IP;
- 若未添加,点击“添加规则”,协议选择“TCP”,端口填写SSH端口(如22),授权对象填写“0.0.0.0/0”(注意:开放公网22端口存在安全风险,建议限制IP)。
检查本地网络连通性
若客户端与服务器在同一局域网,可用ping测试网络是否通:
ping 服务器IP地址
- 若
ping不通,检查网络配置(如IP、子网掩码、网关)或交换机/路由器设置; - 若
ping通但SSH连接失败,说明网络可达,问题可能在服务或防火墙。
客户端排查:SSH命令或配置是否正确?
有时问题出在客户端,如SSH命令格式错误或客户端配置问题。
使用-v参数查看详细连接日志
在客户端执行SSH命令时添加-v(verbose)参数,可输出详细的连接过程,帮助定位问题:
ssh -v username@服务器IP
关键信息关注:
Connecting to 服务器IP...:是否尝试连接目标IP;ssh_exchange_identification: read: Connection reset by peer:可能是服务器防火墙拦截或SSH服务未启动;Permission denied (publickey,password):认证失败,需检查密码/密钥配置。
检查SSH客户端配置
若使用SSH客户端工具(如Xshell、PuTTY),检查以下配置:
- 主机IP和端口是否正确;
- 认证方式(密码/密钥)是否匹配服务器配置;
- 用户名是否存在且拥有登录权限。
清理SSH客户端缓存
若之前连接正常,突然无法访问,可能是客户端缓存或known_hosts问题,尝试删除服务器条目后重新连接:
ssh-keygen -R 服务器IP # 删除本地known_hosts中的服务器记录
日志分析:定位根本错误
通过查看服务器日志,可快速定位SSH服务的具体错误原因。
查看SSH服务日志
sudo tail -f /var/log/auth.log # Ubuntu默认SSH日志(Debian/Ubuntu系统) # 或 sudo tail -f /var/log/secure # CentOS/RHEL系统日志
常见日志信息:
Failed password for root from...:密码错误,检查用户名/密码;Connection refused by remote host:SSH服务未启动或端口未开放;Did not receive identification string from server:SSH服务崩溃或配置错误。
排查流程图
若遇到“Ubuntu无法访问SSH服务”,可按以下流程快速定位:
graph TD
A[无法访问SSH] --> B{检查服务状态}
B -->|未运行| C[启动服务: systemctl start ssh]
B -->|已运行| D[检查配置文件: sshd_config]
D -->|配置错误| E[修改配置并重启]
D -->|配置正确| F[检查防火墙/安全组]
F -->|已拦截| G[放行SSH端口]
F -->|未拦截| H[检查网络连通性]
H -->|网络不通| I[检查网络配置]
H -->|网络通| J[检查客户端认证/命令]
J -->|客户端问题| K[修复客户端配置]
J -->|服务器问题| L[查看日志定位]
注意事项
- 安全优先:避免直接开放root密码登录(
PermitRootLogin no),建议使用密钥认证; - 端口变更:若修改SSH端口(如从22改为2222),需同步更新防火墙、安全组及客户端连接配置;
- 定期备份:修改
sshd_config前建议备份原文件(sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak),避免配置错误导致无法登录。
通过以上步骤,绝大多数“Ubuntu无法访问SSH服务”的问题均可解决,若问题仍未解决,可提供具体的错误信息和日志内容,进一步定位原因。


