问题描述:
ping <ubuntu_ip> 正常,但使用 FinalShell/Xshell 等 SSH 客户端连接时,提示“连接超时”或“连接被拒绝”。
根本原因:
ping (ICMP协议) 通,仅代表网络层可达。SSH (TCP 22端口) 不通,是应用层服务或传输层端口问题。
排查流程
在 Ubuntu 终端中,按顺序执行以下检查。
1. 检查 SSH 服务 (openssh-server)
Ubuntu 桌面版默认不安装 SSH 服务。这是首要排查点。
1.1. 检查状态:
sudo systemctl status ssh
active (running): 服务正常,跳至第 2 步。inactive (dead): 已安装但未运行。Unit ssh.service not found: 未安装。
1.2. 修复:
- 如未安装,执行安装:
sudo apt update sudo apt install openssh-server - 启动并设置开机自启:
sudo systemctl start ssh sudo systemctl enable ssh
2. 检查防火墙 (UFW)
防火墙可能拦截了 SSH 的 22 端口。
2.1. 检查状态:
sudo ufw status
Status: inactive: 防火墙关闭,跳至第 3 步。Status: active: 防火墙开启,检查规则列表。
2.2. 修复 (若防火墙开启):
- 查看规则列表,如无
22/tcp ALLOW或ssh ALLOW规则,则需放行。 - 执行放行命令 (推荐):
sudo ufw allow 22 - 或者,直接关闭防火墙 (仅限安全内网环境):
sudo ufw disable
3. 检查 SSH 监听配置
确认 SSH 服务监听在正确的网络接口上。
3.1. 检查监听地址和端口:
sudo ss -tlpn | grep ssh
- 正确状态: 监听地址应为
0.0.0.0:22或[::]:22,代表监听所有网络接口。 - 错误状态: 若为
127.0.0.1:22,则表示只监听本机,外部无法访问。
3.2. 修复 (若监听地址错误):
- 编辑配置文件:
sudo nano /etc/ssh/sshd_config。 - 找到
ListenAddress行,用#注释掉,或改为ListenAddress 0.0.0.0。 - 重启 SSH 服务使之生效:
sudo systemctl restart ssh。
4. 身份验证:密码问题
当 FinalShell 出现密码输入框,说明连接已建立,仅剩认证。
密码是什么?
是你登录 Ubuntu 系统的那个用户的密码。例如,你用chensir用户连接,就输入chensir的登录密码。
注意: 输入密码时屏幕无任何显示,输入完毕直接回车。为何
root用户无法登录?
Ubuntu 默认禁止root用户通过密码远程 SSH 登录。这是安全策略。
正确实践: 使用普通用户登录,然后通过su -或sudo -i切换到root。
速查清单
| 检查项 | 命令/方法 | 正常状态 |
|---|---|---|
| SSH 服务 | sudo systemctl status ssh |
active (running) |
| 防火墙 | sudo ufw status |
inactive 或 active 且规则含 22/tcp ALLOW |
| 监听地址 | sudo ss -tlpn | grep ssh |
0.0.0.0:22 或 [::]:22 |
| 认证 | FinalShell 密码框 | 输入 Ubuntu 用户的登录密码 |