CentOS系统拒绝SSH连接是一个常见问题,可能由多种因素导致,排查时需要从网络配置、服务状态、防火墙规则、认证机制等多个方面入手,以下将逐步分析可能的原因及解决方案。

检查SSH服务状态
首先确认SSH服务是否正常运行,通过命令systemctl status sshd查看服务状态,如果显示inactive(dead),说明服务未启动,此时需执行systemctl start sshd启动服务,并使用systemctl enable sshd设置开机自启,若服务启动失败,检查日志文件/var/log/secure或/var/log/messages中的错误信息,常见的包括配置文件语法错误或端口冲突。
验证网络连接与端口
确保SSH服务监听正确的端口,默认情况下SSH使用22端口,可通过netstat -tuln | grep 22或ss -tuln | grep 22检查端口是否处于监听状态,如果未监听,需编辑SSH配置文件/etc/ssh/sshd_config,确保Port 22未被注释,并修改ListenAddress为服务器的正确IP地址,修改后需重启SSH服务systemctl restart sshd,使用ping命令测试网络连通性,排除网络中断或路由问题。
检查防火墙与SELinux设置
防火墙和SELinux可能是连接被拒的主要原因,对于防火墙,执行firewall-cmd --list-ports查看是否开放SSH端口,若未开放,运行firewall-cmd --permanent --add-service=ssh和firewall-cmd --reload永久添加规则,对于SELinux,使用getsebool -a | grep ssh检查SSH相关布尔值,确保ssh_home_dir和ssh_sysadm_login等状态为on,若怀疑SELinux阻止连接,可临时设置为宽松模式setenforce 0测试,若恢复正常,则需调整相应安全上下文。

审核客户端与认证配置
客户端连接问题可能源于认证失败或密钥不匹配,检查服务器/etc/ssh/sshd_config中的认证设置,确保PasswordAuthentication yes(若使用密码登录)或PubkeyAuthentication yes(若使用密钥)未被注释,确认客户端使用的用户名和密码正确,或密钥文件权限设置正确(客户端私钥权限应为600),若使用密钥登录,检查~/.ssh/authorized_keys文件是否包含正确的公钥,并确认文件所有者为目标用户。
其他常见问题
需检查服务器负载过高导致连接超时,可通过top或htop命令查看资源占用情况,若服务器IP发生变化,需确保客户端配置了正确的IP地址,检查服务器日志中的Failed password或Invalid user等信息,定位具体错误原因。
FAQs
Q1: 为什么SSH连接提示“Permission denied (publickey,password)”?
A1: 此错误通常表示认证失败,若使用密钥登录,需确认客户端私钥与服务器authorized_keys中的公钥匹配,且私钥文件权限正确(chmod 600 ~/.ssh/id_rsa),若使用密码登录,检查用户名和密码是否正确,并确保服务器配置允许密码认证(PasswordAuthentication yes)。

Q2: 如何解决SSH连接超时问题?
A2: 连接超时可能由网络延迟、防火墙拦截或服务器负载过高导致,首先测试网络连通性(ping IP),检查防火墙规则是否允许SSH端口,若服务器负载高,清理后台进程或升级硬件,可尝试调整SSH超时配置,如修改/etc/ssh/sshd_config中的ClientAliveInterval和ClientAliveCountMax参数,避免连接因空闲超时断开。