SSH(Secure Shell)是 Linux 系统管理中不可或缺的工具,它提供了一种加密的网络协议,用于安全地远程管理服务器,在 CentOS 系统中,SSH 服务由 sshd 守护进程提供,掌握如何正确启动、配置和管理该服务,是每一位系统管理员的基本功,本文将详细介绍在 CentOS 环境下启动 SSH 服务的完整流程,包括服务状态检查、开机自启设置、基础配置以及防火墙规则配置,确保您能够顺利、安全地建立远程连接。

检查与安装 SSH 服务
在开始操作之前,首先需要确认系统中是否已经安装了 OpenSSH 服务器软件包,CentOS 通常默认安装此服务,但最小化安装的版本可能不包含。
可以使用以下命令进行检查:
rpm -qa | grep openssh-server
如果命令输出中包含 openssh-server-x.x.x 之类的字样,则表示已安装,若未安装,可以通过 yum 或 dnf(CentOS 8 及以上版本)进行安装:
sudo yum install -y openssh-server # 或者在 CentOS 8+ 上使用 sudo dnf install -y openssh-server
使用 systemctl 管理 SSH 服务
现代 CentOS 版本(7及以后)普遍使用 systemd 作为初始化系统和服务管理器,systemctl 是与之交互的核心命令,管理 SSH 服务主要通过 systemctl 对 sshd 服务单元进行操作。
检查服务状态
在任何操作之前,了解服务的当前状态是一个好习惯,使用 status 命令可以查看 sshd 是否正在运行、是否已设置为开机自启以及最近的日志信息。
sudo systemctl status sshd
输出结果会清晰地显示服务状态(active (running) 表示正在运行,inactive (dead) 表示已停止),以及加载的配置文件路径。
启动与停止服务
如果服务未运行,可以使用 start 命令启动它。
sudo systemctl start sshd
相应地,如果需要停止服务,可以使用 stop 命令:
sudo systemctl stop sshd
当您对配置文件进行了重大修改,或者服务出现异常需要“冷重启”时,可以使用 restart 命令,它会先停止服务再重新启动。

sudo systemctl restart sshd
设置开机自启
对于服务器而言,确保 SSH 服务在系统重启后能够自动启动至关重要,使用 enable 命令可以创建相应的符号链接,实现此功能。
sudo systemctl enable sshd
执行后,系统会在下次启动时自动加载 sshd 服务,如果想取消开机自启,可以使用 disable 命令。
重载服务配置
如果您只是修改了 SSH 的配置文件(如 /etc/ssh/sshd_config),但希望不中断现有连接的情况下让新配置生效,可以使用 reload 命令,这比 restart 更为温和。
sudo systemctl reload sshd
基础配置与防火墙设置
启动服务后,进行一些基础的安全配置和防火墙规则设置是必要的。
SSH 服务配置
SSH 的主配置文件位于 /etc/ssh/sshd_config,在修改此文件前,建议先备份,以下是一些常用且重要的配置项:
| 指令 | 默认值 | 说明 | 
|---|---|---|
Port | 
22 | SSH 服务监听的端口号,修改为非标准端口可增加安全性。 | 
PermitRootLogin | 
yes | 
是否允许 root 用户直接登录,出于安全考虑,建议设置为 no。 | 
PasswordAuthentication | 
yes | 
是否允许使用密码进行身份验证,禁用密码并强制使用密钥对更安全。 | 
ListenAddress | 
0.0.0 | 
监听的 IP 地址。0.0.0 表示监听所有网络接口。 | 
PubkeyAuthentication | 
yes | 
是否允许使用公钥进行身份验证。 | 
修改完配置文件后,务必使用 sudo systemctl reload sshd 或 sudo systemctl restart sshd 使配置生效。
配置防火墙规则
CentOS 7 及以上版本默认使用 firewalld 作为防火墙管理工具,即使 SSH 服务正在运行,如果防火墙阻止了相应端口,外部客户端依然无法连接。
- 
检查防火墙状态
sudo firewall-cmd --state
如果输出为
running,则表示防火墙正在运行。
 - 
允许 SSH 服务通过
firewalld预定义了常见服务的规则,可以直接添加服务名称,而无需关心具体端口号。sudo firewall-cmd --permanent --add-service=ssh
--permanent参数表示此规则将永久生效,系统重启后依然存在。 - 
重载防火墙配置 添加永久规则后,需要重载防火墙配置才能使其立即生效。
sudo firewall-cmd --reload
 
如果您在配置文件中修改了 SSH 的默认端口(例如改为 2222),则需要添加端口规则而非服务规则:
sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
完成以上所有步骤后,您的 CentOS 服务器的 SSH 服务就已经成功启动并配置妥当,您可以从任何一台 SSH 客户端使用 ssh username@your_server_ip 命令来测试连接。
相关问答 (FAQs)
问题1:我应该如何安全地更改 SSH 的默认端口?
解答: 更改默认端口是一种基础的“安全通过 obscurity”(通过模糊化实现安全)策略,操作步骤如下:使用文本编辑器(如 vi 或 nano)打开 /etc/ssh/sshd_config 文件,找到 #Port 22 这一行,去掉注释符  并将 22 修改为您想要的端口号(2222),保存并退出文件,在防火墙中放行这个新端口:sudo firewall-cmd --permanent --add-port=2222/tcp,然后重载防火墙配置:sudo firewall-cmd --reload,重载 SSH 服务以应用新配置:sudo systemctl reload sshd。重要提示:在关闭当前连接窗口之前,请务必从另一个终端窗口使用新端口测试连接是否成功,以防因配置错误导致被锁在服务器之外。
问题2:我已经启动了 SSH 服务,并且防火墙也放行了,但还是无法连接,可能是什么原因? 解答: 这是一个常见问题,排查思路可以遵循以下顺序:
- 服务状态确认:再次运行 
sudo systemctl status sshd,确保服务确实是active (running)状态,并且没有报错。 - 监听地址与端口确认:运行 
sudo netstat -tlnp | grep sshd或sudo ss -tlnp | grep sshd,检查服务是否正在您期望的 IP 地址(如0.0.0)和端口上监听。 - 防火墙规则确认:运行 
sudo firewall-cmd --list-all,仔细查看services和ports列表,确保 SSH 服务或您自定义的端口确实已添加到当前活动的区域(如public)中。 - SELinux 状态:CentOS 默认启用了 SELinux,它可能会阻止非标准端口的 SSH 连接,如果您更改了端口,需要使用 
semanage命令(来自policycoreutils-python包)为 SSH 添加新的端口上下文,sudo semanage port -a -t ssh_port_t -p tcp 2222。 - 网络层面问题:检查服务器是否处于云环境,云平台(如 AWS, Azure, 阿里云)通常有自己的安全组或网络访问控制列表(NACL),也需要在这些平台控制台中放行相应的端口,确保客户端和服务器之间的网络路由是通畅的,可以使用 
ping和traceroute命令进行基础诊断。