Linux 服务器 SSH 连接失败的常见原因及排查方法

SSH, Linux, 连接失败, 防火墙, 服务器排查, sshd, 网络故障排除 0 Was this answer helpful?

问题描述

当您尝试通过 SSH 连接到 Linux 服务器时,可能会遇到连接失败的情况。常见的错误提示包括 Connection refusedConnection timed outPermission denied。本文将帮助您逐步排查并解决这些常见问题。

解决方案

1. 检查 SSH 服务是否正在运行

首先确认服务器上的 SSH 服务(sshd)是否已启动并正常运行。

  1. 通过控制台或远程管理终端登录服务器。
  2. 执行以下命令检查 SSH 服务状态:
    systemctl status sshd
  3. 如果服务未运行,请启动它:
    sudo systemctl start sshd
  4. 如需设置开机自启:
    sudo systemctl enable sshd

2. 检查防火墙规则

防火墙可能阻止了 SSH 默认端口(22)的访问。

  1. 检查当前防火墙规则:
    sudo iptables -L -n
    或对于使用 firewalld 的系统:
    sudo firewall-cmd --list-all
  2. 确保 22 端口已开放。使用 firewalld 开放端口:
    sudo firewall-cmd --permanent --add-service=ssh
    sudo firewall-cmd --reload
  3. 如果使用 iptables:
    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

3. 检查 SSH 配置文件

SSH 服务的配置文件可能存在限制。

  1. 打开 SSH 配置文件:
    sudo nano /etc/ssh/sshd_config
  2. 确认以下关键配置项:
    • Port 22 — 确认端口号正确
    • PermitRootLogin — 如需 root 登录,设为 yes
    • PasswordAuthentication — 如使用密码登录,设为 yes
    • AllowUsersDenyUsers — 检查是否限制了特定用户
  3. 修改配置后重启 SSH 服务:
    sudo systemctl restart sshd

4. 检查网络连通性

确认客户端与服务器之间的网络是否通畅。

  1. 使用 ping 测试基本连通性:
    ping your-server-ip
  2. 使用 telnet 或 nc 测试端口是否可达:
    telnet your-server-ip 22

    nc -zv your-server-ip 22
  3. 如果 ping 通但端口不通,请重点排查防火墙和安全组设置。

5. 检查云服务商安全组设置

如果您使用的是云服务器(如 AWS、阿里云、腾讯云等),还需要检查云平台的安全组规则。

  1. 登录云服务商控制台。
  2. 找到对应实例的安全组配置。
  3. 确认入站规则中已允许 TCP 22 端口(或您自定义的 SSH 端口)的访问。
  4. 确认来源 IP 范围是否包含您当前的客户端 IP 地址。

6. 查看 SSH 日志获取详细错误信息

如果以上步骤均未解决问题,请查看 SSH 日志以获取更多线索。

  1. 查看认证日志:
    sudo tail -f /var/log/auth.log
    或在 CentOS/RHEL 系统上:
    sudo tail -f /var/log/secure
  2. 在客户端使用详细模式连接以获取更多调试信息:
    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

Was this answer helpful?

Submit Ticket

If you need help, submit a ticket and our support team will assist you.

Submit Ticket