问题描述
当您尝试通过 SSH 连接到 Linux 服务器时,可能会遇到连接失败的情况。常见的错误提示包括 Connection refused、Connection timed out 或 Permission denied。本文将帮助您逐步排查并解决这些常见问题。
解决方案
1. 检查 SSH 服务是否正在运行
首先确认服务器上的 SSH 服务(sshd)是否已启动并正常运行。
- 通过控制台或远程管理终端登录服务器。
- 执行以下命令检查 SSH 服务状态:
systemctl status sshd - 如果服务未运行,请启动它:
sudo systemctl start sshd - 如需设置开机自启:
sudo systemctl enable sshd
2. 检查防火墙规则
防火墙可能阻止了 SSH 默认端口(22)的访问。
- 检查当前防火墙规则:
sudo iptables -L -n
或对于使用 firewalld 的系统:sudo firewall-cmd --list-all - 确保 22 端口已开放。使用 firewalld 开放端口:
sudo firewall-cmd --permanent --add-service=sshsudo firewall-cmd --reload - 如果使用 iptables:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
3. 检查 SSH 配置文件
SSH 服务的配置文件可能存在限制。
- 打开 SSH 配置文件:
sudo nano /etc/ssh/sshd_config - 确认以下关键配置项:
Port 22— 确认端口号正确PermitRootLogin— 如需 root 登录,设为yesPasswordAuthentication— 如使用密码登录,设为yesAllowUsers或DenyUsers— 检查是否限制了特定用户
- 修改配置后重启 SSH 服务:
sudo systemctl restart sshd
4. 检查网络连通性
确认客户端与服务器之间的网络是否通畅。
- 使用 ping 测试基本连通性:
ping your-server-ip - 使用 telnet 或 nc 测试端口是否可达:
telnet your-server-ip 22
或nc -zv your-server-ip 22 - 如果 ping 通但端口不通,请重点排查防火墙和安全组设置。
5. 检查云服务商安全组设置
如果您使用的是云服务器(如 AWS、阿里云、腾讯云等),还需要检查云平台的安全组规则。
- 登录云服务商控制台。
- 找到对应实例的安全组配置。
- 确认入站规则中已允许 TCP 22 端口(或您自定义的 SSH 端口)的访问。
- 确认来源 IP 范围是否包含您当前的客户端 IP 地址。
6. 查看 SSH 日志获取详细错误信息
如果以上步骤均未解决问题,请查看 SSH 日志以获取更多线索。
- 查看认证日志:
sudo tail -f /var/log/auth.log
或在 CentOS/RHEL 系统上:sudo tail -f /var/log/secure - 在客户端使用详细模式连接以获取更多调试信息:
ssh -vvv user@your-server-ip
附加提示
- 使用密钥认证更安全:建议配置 SSH 密钥对认证代替密码登录,可有效提升服务器安全性。
- 更改默认端口:将 SSH 端口从默认的 22 更改为其他端口(如 2222),可以减少自动化扫描攻击。修改后记得同步更新防火墙和安全组规则。
- 定期更新系统:保持系统和 SSH 服务更新到最新版本,以修复已知安全漏洞。
- 配置 fail2ban:安装 fail2ban 可以自动封禁多次登录失败的 IP 地址,防止暴力破解攻击。
- 备份配置文件:在修改
/etc/ssh/sshd_config之前,建议先备份原文件:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak