首先确认客户端与服务器之间的网络连通性。在Windows客户端打开命令提示符,输入ping <服务器IP地址>,若无法ping通,需检查:
sudo systemctl status sshd(部分系统为ssh),若未运行,启动服务:sudo systemctl start sshd;设置开机自启:sudo systemctl enable sshd。/etc/ssh/sshd_config,确保以下关键配置正确(取消注释或添加):PermitRootLogin yes # 允许root用户登录(若需root登录)
PasswordAuthentication yes # 允许密码认证(若用密码登录)
HostKeyAlgorithms=+ssh-rsa,ssh-dss # 兼容旧版密钥算法
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256 # 兼容密钥交换算法
修改后重启SSH服务:sudo systemctl restart sshd。sudo ufw status,若启用,允许SSH端口(默认22):sudo ufw allow 22;测试时可临时关闭防火墙验证:sudo ufw disable。sudo firewall-cmd --permanent --add-port=22/tcp;重载配置:sudo firewall-cmd --reload。sudo setenforce 0;若问题解决,需调整SELinux策略或永久禁用(修改/etc/selinux/config中SELINUX=disabled)。/etc/ssh/sshd_config中的PasswordAuthentication是否设为yes(若用密码登录)。Options -> Session Options -> SSH -> Authentication -> Private Key File);私钥文件权限需设为600(chmod 600 ~/.ssh/id_rsa);服务器端~/.ssh/authorized_keys文件权限需设为600,所属用户为登录用户。/etc/ssh/sshd_config,添加或修改:ClientAliveInterval 300 # 服务器每5分钟向客户端发送保活信号
ClientAliveCountMax 3 # 若连续3次无响应,则断开连接(总超时15分钟)
重启SSH服务:sudo systemctl restart sshd。Connection→Send protocol NO-OP,设置发送频率(如60秒);调整Connection Timeout(连接超时时间,如30秒)。若以上方法均无效,可通过服务器日志获取详细错误信息:
sudo tail -f /var/log/auth.log # Ubuntu/Debian
sudo tail -f /var/log/secure # CentOS/RHEL
根据日志中的FailedReason字段(如User password authentication failed、The user's service type was incorrect)进一步排查。