在CentOS系统中,SSH(Secure Shell)服务是远程管理服务器的核心工具,而sshd作为SSH的服务端守护进程,其配置的安全性直接关系到服务器的稳定运行,本文将详细介绍CentOS系统中sshd服务的配置方法,涵盖基础设置、安全加固及常见问题排查,帮助用户构建既高效又安全的远程管理环境。

sshd服务基础配置
sshd服务的配置文件位于/etc/ssh/sshd_config,默认情况下,CentOS会启用SSH协议版本2(更安全),并允许root用户直接登录,首次配置时,建议通过vim或nano编辑器打开该文件,重点关注以下参数:
Port:默认端口为22,为避免自动化攻击,可修改为非默认端口(如2222),但需确保防火墙放行该端口。PermitRootLogin:是否允许root用户直接登录,建议设置为no,强制使用普通用户登录后切换至root,提升安全性。PasswordAuthentication:是否启用密码认证,结合PubkeyAuthentication(默认为yes)可配置为仅密钥登录,彻底杜绝密码暴力破解风险。AllowUsers或DenyUsers:通过白名单或黑名单限制允许登录的用户,例如AllowUsers admin user1仅指定用户可访问。
修改完成后,需执行systemctl restart sshd重启服务使配置生效,并通过ss -tulnp | grep sshd确认服务状态。
安全加固关键措施
-
密钥认证配置
在客户端生成SSH密钥对(ssh-keygen -t rsa -b 4096),将公钥(~/.ssh/id_rsa.pub)上传至服务器的~/.ssh/authorized_keys文件中,并设置权限为600,确保sshd_config中PubkeyAuthentication yes和PasswordAuthentication no,实现无密码登录。 -
防火墙与SELinux设置
使用firewall-cmd --permanent --add-port=2222/tcp(假设修改端口为2222)开放端口,并执行firewall-cmd --reload重新加载规则,若SELinux启用,需通过semanage port -a -t ssh_port_t -p tcp 2222添加端口上下文,避免服务拒绝访问。
-
登录超时与限制
在sshd_config中设置ClientAliveInterval 300(每5分钟检测一次连接)和ClientAliveCountMax 3(最多允许3次超时),避免闲置连接占用资源,通过MaxAuthTries 3限制每连接最大认证次数,防止暴力破解。 -
日志监控
SSH日志默认记录在/var/log/secure,可通过grep "Failed password" /var/log/secure分析失败登录尝试,结合fail2ban工具自动封禁恶意IP。
常见问题排查
-
连接超时或被拒绝
检查sshd服务状态(systemctl status sshd)、防火墙规则及SELinux日志(grep AVC /var/log/audit/audit.log),若修改端口后无法连接,确认防火墙是否放行新端口,且sshd_config中端口配置无语法错误。 -
密钥认证失败
验证服务端~/.ssh/authorized_keys文件权限是否为600,所有者是否为当前用户,并检查sshd_config中PubkeyAuthentication是否启用,客户端可通过ssh -v user@ip查看详细连接日志,定位密钥加载或认证环节的异常。
通过以上配置与优化,CentOS的sshd服务可在保障安全性的同时,提供稳定高效的远程管理能力,管理员需定期更新系统补丁、审计日志并根据实际需求调整策略,以应对不断演变的安全挑战。
FAQs
Q1: 修改SSH端口后如何确保服务正常启动?
A1: 修改/etc/ssh/sshd_config中的Port参数后,需执行semanage port -a -t ssh_port_t -p tcp [新端口](若SELinux启用),然后重启服务systemctl restart sshd,最后通过firewall-cmd --permanent --add-port=[新端口]/tcp && firewall-cmd --reload开放防火墙端口,并使用ss -tulnp | grep [新端口]确认监听状态。
Q2: 如何禁止特定用户通过SSH登录?
A2: 在/etc/ssh/sshd_config中添加DenyUsers user1 user2(替换为需禁止的用户名),保存后重启sshd服务,若需基于IP限制,可使用DenyUsers *@192.168.1.100语法,或结合hosts.allow和hosts.deny实现更精细的控制。