插件窝 干货文章 Linux SysOps SSH登录问题排查与解决方法

Linux SysOps SSH登录问题排查与解决方法

sudo SSH bash 检查 462    来源:    2025-04-11

Linux SysOps SSH登录问题排查指南

常见SSH登录问题及排查步骤

1. 连接被拒绝 (Connection refused)

现象

ssh: connect to host example.com port 22: Connection refused

排查步骤: 1. 检查SSH服务是否运行: bash sudo systemctl status sshd 2. 如果没有运行,启动服务: bash sudo systemctl start sshd 3. 检查防火墙设置: bash sudo iptables -L -n sudo ufw status # 如果使用UFW 4. 检查SELinux状态(如果启用): bash sudo sestatus

2. 认证失败 (Authentication failed)

现象

Permission denied (publickey,password).

排查步骤: 1. 确认用户名和密码正确 2. 检查服务器是否允许密码认证: bash sudo grep -E '^PasswordAuthentication' /etc/ssh/sshd_config 3. 检查用户是否被允许登录: bash sudo grep -E '^AllowUsers|^DenyUsers' /etc/ssh/sshd_config 4. 检查用户家目录和.ssh目录权限: bash ls -ld ~ ls -ld ~/.ssh

3. 公钥认证失败

现象

Permission denied (publickey).

排查步骤: 1. 检查客户端公钥是否添加到服务器的~/.ssh/authorized_keys 2. 检查文件权限: bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys 3. 检查sshd_config中的相关设置: bash sudo grep -E '^PubkeyAuthentication|^AuthorizedKeysFile' /etc/ssh/sshd_config

4. 连接超时

现象

ssh: connect to host example.com port 22: Connection timed out

排查步骤: 1. 检查网络连通性: bash ping example.com traceroute example.com 2. 检查目标端口是否开放: bash telnet example.com 22 # 或使用 nc -zv example.com 22 3. 检查服务器是否监听SSH端口: bash sudo netstat -tulnp | grep ssh # 或使用 sudo ss -tulnp | grep ssh

5. 主机密钥验证失败

现象

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

解决方法: 1. 删除客户端known_hosts文件中对应的条目: bash ssh-keygen -R example.com 2. 或者手动编辑~/.ssh/known_hosts文件删除相关行

高级排查工具

  1. 使用详细模式查看连接过程:

    ssh -vvv user@example.com
    
  2. 检查SSH服务日志:

    sudo journalctl -u sshd --no-pager -n 50
    # 或
    sudo tail -f /var/log/auth.log
    
  3. 检查TCP连接:

    sudo tcpdump -i any port 22 -n
    

常见配置修改

  1. 修改SSH端口:

    sudo sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
    sudo systemctl restart sshd
    
  2. 禁用root登录:

    sudo sed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
    sudo systemctl restart sshd
    
  3. 启用/禁用密码认证:

    # 禁用密码认证
    sudo sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
    sudo systemctl restart sshd
    

预防措施

  1. 定期更新SSH软件包:

    sudo apt update && sudo apt upgrade openssh-server  # Debian/Ubuntu
    sudo yum update openssh-server  # RHEL/CentOS
    
  2. 使用fail2ban防止暴力破解:

    sudo apt install fail2ban  # Debian/Ubuntu
    sudo yum install fail2ban  # RHEL/CentOS
    
  3. 配置SSH密钥对认证而非密码认证

  4. 限制可登录的用户和IP范围

通过系统性地排查这些问题,可以解决大多数SSH登录问题并提高系统安全性。