问题描述:
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 用户的登录密码 |