在 CentOS 7 中,SSH 服务器软件包是 OpenSSH,我们将完成以下步骤:

- 检查并安装 OpenSSH 服务器
- 启动并设置开机自启 SSH 服务
- 核心安全配置(修改
sshd_config文件) - 配置防火墙,允许 SSH 流量
- 连接测试
- 进阶安全建议(可选但强烈推荐)
第 1 步:检查并安装 OpenSSH 服务器
检查您的系统是否已经安装了 OpenSSH 服务器。
# 检查是否已安装 rpm -qa | grep openssh-server
如果看到类似 openssh-server-7.4p1-21.el7.x86_64 的输出,说明已经安装,如果没有输出或需要升级,请执行以下命令进行安装:
# 使用 yum 安装(推荐) sudo yum install -y openssh-server # 或者使用 dnf 安装(适用于较新的 CentOS 7 版本或未来版本) # sudo dnf install -y openssh-server
安装完成后,系统会自动创建 SSH 的配置文件,位于 /etc/ssh/sshd_config。
第 2 步:启动并设置开机自启 SSH 服务
安装完成后,SSH 服务默认可能是未启动的,我们需要手动启动它,并设置它在系统重启后自动运行。

# 启动 SSH 服务 sudo systemctl start sshd # 设置 SSH 服务开机自启 sudo systemctl enable sshd
您可以使用以下命令检查 SSH 服务的当前状态:
# 查看服务状态 sudo systemctl status sshd
如果看到绿色的 active (running) 字样,表示服务正在正常运行。
第 3 步:核心安全配置(修改 sshd_config 文件)
这是最关键的一步,我们需要编辑 SSH 的主配置文件 /etc/ssh/sshd_config 来增强安全性。
警告: 在修改配置文件之前,强烈建议先备份一份原始文件。

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
然后使用您喜欢的文本编辑器(如 vi 或 nano)打开文件:
sudo vi /etc/ssh/sshd_config
以下是几个重要的安全配置项及其说明:
| 配置项 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
Port |
22 |
22 或自定义端口(如 2222) |
修改默认端口可以防止自动化攻击脚本,如果修改,请确保防火墙规则也同步更新。 |
PermitRootLogin |
yes |
no |
强烈建议禁用,禁止 root 用户直接通过 SSH 登录,应使用普通用户登录后 su 或 sudo 提权。 |
PasswordAuthentication |
yes |
no |
强烈建议禁用,改为只允许密钥对认证,这是最安全的认证方式。 |
PubkeyAuthentication |
yes |
yes |
确保 yes,以启用密钥对认证。 |
PermitEmptyPasswords |
no |
no |
确保为 no,禁止空密码登录。 |
AllowUsers |
(无) | 允许的用户名 |
只允许指定用户列表通过 SSH 登录,AllowUsers user1 user2。 |
DenyUsers |
(无) | 禁止的用户名 |
拒绝指定用户列表通过 SSH 登录。 |
示例配置:
# 修改端口为 2222 (可选) Port 2222 # 禁止 root 用户直接登录 PermitRootLogin no # 只允许密钥对认证,禁止密码登录 (最安全) PasswordAuthentication no PubkeyAuthentication yes # 只允许用户 'centos' 和 'devops' 登录 (可选) AllowUsers centos devops
修改完成后保存文件(在 vi 中是 wq),然后重启 SSH 服务使配置生效:
sudo systemctl restart sshd
第 4 步:配置防火墙,允许 SSH 流量
CentOS 7 默认使用 firewalld 防火墙,我们需要为 SSH 服务添加一个防火墙规则。
# 永久添加 SSH 服务到防火墙规则 (firewalld 会自动处理 22 端口) sudo firewall-cmd --permanent --add-service=ssh # 如果您在第 3 步修改了 SSH 端口 (例如改为了 2222),则需要手动添加该端口 # sudo firewall-cmd --permanent --add-port=2222/tcp # 重新加载防火墙规则,使更改生效 sudo firewall-cmd --reload
您可以检查防火墙规则是否已成功添加:
sudo firewall-cmd --list-all
您应该能在输出中看到 ssh (或自定义端口) 已被允许。
第 5 步:连接测试
您可以从另一台计算机尝试连接到您的 CentOS 7 服务器。
您设置了密钥对认证(推荐)
如果您在第 3 步禁用了密码登录,您需要使用密钥对。
# 基本语法 ssh -i /path/to/your/private_key username@your_server_ip # 示例 ssh -i ~/.ssh/my_centos_key centos@192.168.1.100
您仍然使用密码认证
如果您暂时没有设置密钥对,保留了密码登录。
# 基本语法 ssh username@your_server_ip # 示例 ssh centos@192.168.1.100
如果连接成功,说明您的 SSH 服务器配置基本完成。
第 6 步:进阶安全建议(可选但强烈推荐)
为了进一步提升安全性,您可以考虑以下措施:
使用 SSH 密钥对认证
这是比密码安全得多的方式。
-
在客户端生成密钥对(如果还没有的话):
ssh-keygen -t rsa -b 4096
按照提示操作,通常直接按回车键即可,这会在
~/.ssh/目录下生成id_rsa(私钥) 和id_rsa.pub(公钥)。 -
将公钥复制到服务器:
# 基本语法 ssh-copy-id -i ~/.ssh/id_rsa.pub username@your_server_ip # 示例 ssh-copy-id -i ~/.ssh/id_rsa.pub centos@192.168.1.100
此命令会自动将公钥添加到服务器上的
~/.ssh/authorized_keys文件中,并设置正确的权限。 -
测试密钥登录:关闭本地终端,重新连接,此时应该可以直接登录,而无需输入密码。
禁用密码登录(在密钥配置好后)
确认密钥登录一切正常后,回到第 3 步,将 sshd_config 文件中的 PasswordAuthentication 设置为 no,然后重启 SSH 服务。
# 编辑配置文件 sudo vi /etc/ssh/sshd_config # 修改此项为 no PasswordAuthentication no # 重启服务 sudo systemctl restart sshd
即使攻击者知道了你的用户名和密码,也无法登录服务器。
使用 Fail2ban 防止暴力破解
Fail2ban 是一个防止入侵的工具,它会监控日志文件(如 SSH 的登录日志),并在检测到多次失败尝试后,自动通过防火墙封禁攻击者的 IP 地址。
# 安装 Fail2ban sudo yum install -y fail2ban # 复制并编辑配置文件 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # 编辑主配置文件 sudo vi /etc/fail2ban/jail.local
在 jail.local 文件中,找到 [sshd] 部分,进行如下配置:
[sshd] enabled = true port = 22 filter = sshd logpath = /var/log/secure maxretry = 3 bantime = 3600 # 封禁 1 小时 (单位: 秒)
配置完成后,启动并设置 fail2ban 开机自启:
sudo systemctl start fail2ban sudo systemctl enable fail2ban
故障排除
如果连接失败,可以检查以下日志:
-
SSH 服务日志:
sudo tail -f /var/log/secure
这会显示所有 SSH 的登录尝试和错误信息,是排查问题的首选。
-
系统日志:
sudo journalctl -u sshd -f
通过以上步骤,您就可以在 CentOS 7 上配置一个既功能完善又安全可靠的 SSH 服务器了。
