在CentOS系统中配置SSH服务器是远程管理和维护服务器的常见操作,通过SSH(Secure Shell)可以实现加密的远程登录、文件传输等功能,确保数据传输的安全性,以下是详细的配置步骤和注意事项,涵盖SSH服务安装、基本配置、安全加固及常见问题处理等内容。

SSH服务安装与启动
CentOS系统默认可能未安装SSH服务,需手动安装,以root用户或具有sudo权限的用户执行以下操作:
- 检查是否已安装SSH服务
执行命令rpm -q openssh-server,若返回包名则已安装,否则需安装。 - 安装SSH服务
使用yum包管理器安装,命令为yum install openssh-server openssh-clients -y,其中openssh-server为服务器端组件,openssh-clients为客户端工具。 - 启动并设置开机自启
安装后启动SSH服务:systemctl start sshd,设置开机自启:systemctl enable sshd,可通过systemctl status sshd查看服务状态,确保active(running)。
SSH服务配置文件修改
SSH服务的核心配置文件为/etc/ssh/sshd_config,使用文本编辑器(如vi)打开后,可根据需求修改以下关键参数:
| 参数名 | 默认值 | 推荐值/说明 |
|---|---|---|
| Port | 22 | 修改为非默认端口(如2222),降低被自动化攻击扫描的概率 |
| PermitRootLogin | yes | 建议设为no,禁止root直接远程登录,需通过普通用户登录后切换 |
| PasswordAuthentication | yes | 可结合密钥认证设为no,提升安全性;若需密码登录,建议结合复杂密码策略 |
| PubkeyAuthentication | yes | 启用公钥认证,更安全;需在用户目录生成.ssh/authorized_keys文件 |
| PermitEmptyPasswords | no | 禁止空密码登录 |
| MaxAuthTries | 6 | 限制每连接最大认证尝试次数,防止暴力破解 |
| LoginGraceTime | 120 | 设置登录认证超时时间(秒),超时自动断开 |
| AllowUsers | 无 | 限制允许登录的用户,如AllowUsers user1 user2,仅允许指定用户登录 |
| DenyUsers | 无 | 明确禁止登录的用户,如DenyUsers testuser |
修改后注意事项:
- 保存配置文件后,需执行
systemctl restart sshd使配置生效。 - 若修改了SSH端口(如2222),需确保防火墙允许该端口访问(
firewall-cmd --permanent --add-port=2222/tcp并重载防火墙firewall-cmd --reload)。 - 建议先通过终端直接操作服务器修改配置,避免因配置错误导致无法远程登录。
SSH安全加固措施
-
密钥认证替代密码认证
(图片来源网络,侵删)- 在客户端生成密钥对:
ssh-keygen -t rsa -b 4096,默认生成~/.ssh/id_rsa(私钥)和~/.ssh/id_rsa.pub(公钥)。 - 复制到服务器的目标用户目录
~/.ssh/authorized_keys中,并设置权限:chmod 600 ~/.ssh/authorized_keys,chmod 700 ~/.ssh。 - 服务器端配置
PasswordAuthentication no后重启SSH服务,仅允许密钥登录。
- 在客户端生成密钥对:
-
禁用不必要的用户和协议
- 锁定不活跃的系统用户:
passwd -l username,或删除用户:userdel -r username。 - 禁用SSHv1协议(不安全):确保配置文件中
Protocol 2(默认为SSHv2)。
- 锁定不活跃的系统用户:
-
使用fail2ban防暴力破解
安装fail2ban:yum install fail2ban -y,配置/etc/fail2ban/jail.local,设置SSH监禁规则,如:[sshd] enabled = true port = 2222 filter = sshd logpath = /var/log/secure maxretry = 3 bantime = 3600
启动fail2ban:
systemctl start fail2ban并设置开机自启。
SSH客户端连接测试
- 使用密码登录
命令:ssh -p 2222 username@服务器IP,输入密码后连接。 - 使用密钥登录
命令:ssh -p 2222 -i ~/.ssh/id_rsa username@服务器IP,无需输入密码(需确保私钥权限为600)。
常见问题排查
- 连接超时或被拒绝
- 检查SSH服务状态:
systemctl status sshd。 - 检查防火墙规则:
firewall-cmd --list-ports,确认SSH端口已开放。 - 检查SELinux状态:
sestatus,若为 enforcing,可临时测试关闭setenforce 0(需配置SELinux策略)。
- 检查SSH服务状态:
- 认证失败
- 检查服务器端
/var/log/secure日志,定位错误原因(如密码错误、密钥不匹配)。 - 确认
authorized_keys文件权限正确,且公钥格式无误(避免包含多余字符)。
- 检查服务器端
相关问答FAQs
Q1: 修改SSH端口后无法连接,如何排查?
A1: 首先检查防火墙是否开放新端口(如2222),执行firewall-cmd --list-ports确认;其次检查SELinux是否阻止,临时关闭SELinux测试(setenforce 0);最后检查SSH服务配置文件sshd_config中Port参数是否正确修改并重启服务(systemctl restart sshd),若仍无法连接,查看服务器安全组(云服务器)或iptables规则,确保端口未被拦截。

Q2: 如何限制仅允许特定IP地址访问SSH服务?
A2: 可通过TCP Wrappers或防火墙实现。
- 方法一(TCP Wrappers):编辑
/etc/hosts.allow,添加sshd: 192.168.1.100, 10.0.0.50(允许的IP),在/etc/hosts.deny中添加sshd: ALL(拒绝其他IP)。 - 方法二(firewalld):执行
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept',重载防火墙firewall-cmd --reload。
注意:结合AllowUsers或DenyUsers参数可实现更精细的用户控制。
