一、可能原因及解决方法
1、SSH 服务未启动
检查方法:使用systemctl status sshd
命令查看 SSH 服务状态,若显示 “inactive” 或 “dead”,则表示服务未运行。

解决方法:执行systemctl start sshd
命令启动 SSH 服务。
2、防火墙阻止 SSH 连接
检查方法:对于 CentOS 7 及更早版本,使用iptables L | grep ssh
命令;对于 CentOS 8 及更新版本,使用firewallcmd listports
命令查看是否允许 SSH 连接。
解决方法:如果端口未开放,对于 CentOS 7 及更早版本,使用iptables A INPUT p tcp dport 22 j ACCEPT
命令添加规则;对于 CentOS 8 及更新版本,使用firewallcmd zone=public addservice=ssh permanent
命令添加规则,然后执行firewallcmd reload
重新加载防火墙配置。
3、SSH 配置错误
检查方法:查看/etc/ssh/sshd_config
文件,检查以下关键配置项是否正确:

Port:默认为 22,若被更改需确认新端口号。
PermitRootLogin:是否允许 root 用户通过 SSH 登录,默认为 yes。
PasswordAuthentication:是否允许使用密码进行 SSH 登录,默认为 yes。
PubkeyAuthentication:是否允许使用公钥进行 SSH 登录,默认为 yes。
解决方法:根据需要修改配置文件,保存后重启 SSH 服务使配置生效,若要修改端口号为 2222,在配置文件中找到 “#Port 22” 并将其改为 “Port 2222”,保存后执行systemctl restart sshd
。
4、用户名或密码错误

检查方法:确保输入的用户名和密码正确无误。
解决方法:仔细核对用户名和密码,注意大小写及特殊字符的正确性。
5、被阻止的 IP 地址
检查方法:查看/etc/hosts.deny
和/etc/hosts.allow
文件中是否有限制 SSH 访问的 IP 地址相关配置。
解决方法:如果有限制,根据实际情况编辑这两个文件,删除或修改相关的限制规则。
6、网络连接问题
检查方法:使用ping <IP地址>
命令测试与目标服务器的网络连通性。
解决方法:若无法 ping 通,检查网络设备是否正常工作,如路由器、交换机等;检查网络配置是否正确,包括 IP 地址、子网掩码、网关等;如果是虚拟机环境,还需检查虚拟机网络设置是否正确。
7、SELinux 限制
检查方法:使用getenforce
命令查看 SELinux 的状态,若显示 “Enforcing”,则表示 SELinux 处于强制模式,可能会限制 SSH 连接。
解决方法:可以临时关闭 SELinux,执行setenforce 0
命令;若要永久关闭,编辑/etc/selinux/config
文件,将 “SELINUX=enforcing” 改为 “SELINUX=disabled”,保存后重启系统。
8、OpenSSH 相关软件包问题
检查方法:使用rpm qa | grep openssh
或yum list installed | grep openssh
命令查看 OpenSSH 相关软件包是否安装及版本信息。
解决方法:如果未安装 opensshserver,执行yum install opensshserver
进行安装;如果已安装但版本过低或存在问题,可尝试升级或重新安装 OpenSSH。
9、SSH 密钥问题
检查方法:如果使用密钥认证方式登录,检查客户端是否已正确添加服务器的公钥,以及本地的私钥文件是否可访问且权限正确。
解决方法:若公钥未添加,将服务器的公钥复制到客户端的~/.ssh/known_hosts
文件中;若私钥文件权限不正确,使用chmod 600 ~/.ssh/id_rsa
命令修改权限。
二、FAQs
1、Q: CentOS 中如何查看 SSH 服务的监听端口?
A: 可以使用netstat an | grep ssh
或ss antp | grep ssh
命令查看 SSH 服务的监听端口,SSH 服务正常启动且配置正确,通常会显示类似 “tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 12345/sshd” 的信息,表明 SSH 服务正在监听 22 端口。
2、Q: 修改 SSH 配置文件后是否需要重启系统?
A: 不需要重启系统,只需重启 SSH 服务即可使配置生效,可以使用systemctl restart sshd
命令重启 SSH 服务。