在CentOS系统中,Secure Shell (SSH) 是进行远程管理和服务器维护的核心工具,其默认配置虽然易于使用,但为了提升安全性、满足特定工作流程或实现个性化定制,修改SSH配置是每一位系统管理员的必备技能,本文将详细、系统地介绍如何在CentOS中修改SSH服务配置,确保您能够安全、高效地管理您的服务器。

准备工作:安全第一
在对任何核心系统服务进行修改之前,最关键的一步是做好备份,SSH服务的配置文件通常位于 /etc/ssh/sshd_config,一个错误的配置可能会导致您无法远程连接到服务器,请务必在开始前执行以下命令创建一个备份文件:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
所有对SSH配置的修改都需要管理员权限,您需要以 root 用户身份登录,或在普通用户下使用 sudo 命令来执行编辑操作。
核心配置文件:sshd_config
/etc/ssh/sshd_config 是SSH守护进程的主配置文件,它由一系列“指令-值”对组成,格式为 指令 值,以 开头的行是注释行,用于提供说明或禁用某个指令,了解一些常用的核心指令是进行有效配置的基础。
下表列出了一些最常用且重要的SSH配置指令:
| 指令 | 默认值 | 说明 |
|---|---|---|
Port |
22 | 设置SSH服务监听的端口号,修改默认端口可有效规避自动化扫描攻击。 |
PermitRootLogin |
yes | 是否允许 root 用户直接通过SSH登录,出于安全考虑,强烈建议设置为 no。 |
PasswordAuthentication |
yes | 是否启用密码认证,为了更高的安全性,可在配置好密钥对登录后将其设置为 no。 |
PubkeyAuthentication |
yes | 是否启用公钥认证,这是比密码更安全的认证方式。 |
AllowUsers |
(无) | 限制只有指定的用户可以登录。AllowUsers user1 user2。 |
AllowGroups |
(无) | 限制只有指定用户组的成员可以登录。AllowGroups sshusers。 |
MaxAuthTries |
6 | 设置最大认证尝试次数,超过此次数后连接将被断开,可有效防止暴力破解。 |
常见修改场景与实战
掌握了基本指令后,我们来看几个最常见且实用的修改场景。
修改SSH默认端口
将SSH端口从默认的22更改为一个不常用的高位端口(如2222),是提升服务器安全性的第一步。
操作步骤:
-
使用文本编辑器(如
vi或nano)打开配置文件:sudo vi /etc/ssh/sshd_config
-
找到
#Port 22这一行,去掉开头的 并将数字22修改为您希望的新端口号,2222:#Port 22 Port 2222 -
保存文件并退出编辑器。

重要提示: 修改端口后,必须相应地调整防火墙规则,否则将无法连接,后续章节会详细说明防火墙配置。
禁用root用户远程登录
允许 root 用户直接登录存在巨大风险,因为这是攻击者首要尝试爆破的用户名,最佳实践是创建一个普通用户,赋予其 sudo 权限,然后禁止 root 远程登录。
操作步骤:
- (前置步骤) 确保您已经创建了一个具有
sudo权限的普通用户,并且可以正常登录。 - 打开
/etc/ssh/sshd_config文件。 - 找到
PermitRootLogin yes这一行,将其修改为:PermitRootLogin no - 保存文件,这样,
root用户将无法再通过SSH直接登录,必须先以普通用户身份登录,然后使用su -或sudo提升权限。
使用密钥对登录,禁用密码认证
SSH密钥对认证是一种比密码加密强度更高、更安全的认证方式,一旦配置成功,就可以完全禁用密码认证,彻底杜绝暴力破解的风险。
操作步骤:
- (前置步骤) 在您的本地计算机上生成SSH密钥对(如果尚未生成),并将公钥(
~/.ssh/id_rsa.pub复制到CentOS服务器上对应用户的~/.ssh/authorized_keys文件中,确保密钥登录已经可以正常使用。 - 打开
/etc/ssh/sshd_config文件。 - 确保
PubkeyAuthentication yes指令是启用状态(这通常是默认值)。 - 找到
PasswordAuthentication yes,将其修改为:PasswordAuthentication no - 保存文件,此后,只有持有正确私钥的客户端才能登录服务器。
保存配置并重启SSH服务
所有对 /etc/ssh/sshd_config 文件的修改都不会立即生效,必须重启SSH服务才能让新的配置生效,在CentOS 7及更高版本中,使用 systemd 来管理服务。
执行以下命令来重启SSH服务:
sudo systemctl restart sshd
如果您希望在不中断现有连接的情况下重新加载配置文件(仅限部分配置项支持),可以使用 reload 命令:
sudo systemctl reload sshd
重启后,建议检查一下服务的状态,确保其正常运行:
sudo systemctl status sshd
如果看到 active (running) 的绿色字样,说明服务已成功重启。

配置防火墙以放行新端口
如果您修改了SSH端口,还必须更新防火墙规则,允许新的端口通过,在CentOS 7/8/9中,默认使用 firewalld。
假设您将SSH端口修改为 2222,执行以下命令:
# 永久添加TCP 2222端口到防火墙规则 sudo firewall-cmd --permanent --add-port=2222/tcp # 重新加载防火墙配置,使规则生效 sudo firewall-cmd --reload
如果您使用的是 iptables,则规则会略有不同。
相关问答FAQs
问题1:修改SSH端口后无法连接,该怎么办?
答: 这是一个常见问题,通常由以下几个原因导致,请按顺序排查:
- SSH服务未重启: 确认您已经执行了
sudo systemctl restart sshd或sudo systemctl reload sshd。 - 防火墙未放行: 这是最常见的原因,请检查
firewalld或iptables是否已经放行您设置的新端口,可以使用sudo firewall-cmd --list-ports来查看已放行的端口列表。 - 客户端连接方式错误: 在使用SSH客户端连接时,需要通过
-p参数指定新的端口号。ssh user@your_server_ip -p 2222。 - SELinux限制: 如果您的服务器开启了SELinux,它可能不允许SSH服务在非标准端口上监听,您需要使用以下命令为新端口添加SELinux规则:
sudo semanage port -a -t ssh_port_t -p tcp 2222,如果提示semanage命令未找到,请先安装policycoreutils-python-utils包。
问题2:sshd_config 和 ssh_config 这两个文件有什么区别?
答: 这是两个非常容易混淆但功能完全不同的配置文件,它们分别控制着SSH服务器的不同方面。
/etc/ssh/sshd_config(注意多了一个d):这是 SSH守护进程 的配置文件,用于控制 服务器端 的行为,它定义了服务器监听的端口、允许谁登录、使用何种认证方式、登录后的环境限制等,您在服务器上进行的所有修改,都是在编辑这个文件。/etc/ssh/ssh_config:这是 SSH客户端 的全局配置文件,用于控制 本地机器 上的SSH客户端程序在连接到 任何远程服务器 时的默认行为,您可以在这里设置默认使用的用户名、默认连接端口、或者为特定主机设置别名和密钥文件。
sshd_config 管服务器,ssh_config 管客户端,作为服务器管理员,您主要关心的是 sshd_config。