在管理CentOS服务器时,SSH(Secure Shell)是不可或缺的核心工具,它提供了一个安全的加密通道进行远程管理,正确地设置和管理SSH服务的状态,是保障服务器安全与稳定运维的第一步,本文将详细介绍如何在CentOS系统中检查、启动、停止、重启SSH服务,以及如何进行关键的安全配置,确保您的服务器既能便捷访问,又坚不可摧。

基础命令:管理SSH服务运行状态
在现代的CentOS版本(如CentOS 7及以后)中,系统和服务管理由systemd接管,因此我们主要使用systemctl命令来控制SSH服务(其服务名为sshd)。
检查SSH服务状态
了解服务的当前状态是首要操作,使用以下命令可以查看sshd服务是否正在运行、是否已设置为开机自启以及最近的日志信息。
systemctl status sshd
输出结果中,Active: active (running)表示服务正在正常运行,如果显示inactive (dead),则表示服务已停止。Loaded行会显示服务是否已配置为开机自启(enabled)或禁用(disabled)。
启动、停止与重启SSH服务
根据管理需求,您可能需要手动控制服务的运行状态。
- 启动SSH服务:当服务处于停止状态时,使用此命令启动它,以便接受远程连接。
sudo systemctl start sshd
 - 停止SSH服务:在需要维护或暂时禁止所有SSH远程访问时,可以停止服务。
sudo systemctl stop sshd
 - 重启SSH服务:当您修改了SSH的配置文件(如
sshd_config)后,需要重启服务才能使更改生效,重启会先终止服务,再重新启动。sudo systemctl restart sshd
 - 重新加载SSH服务:这是一个更温和的操作,它会让
sshd进程重新读取配置文件,而不会中断当前已建立的SSH连接,推荐在修改配置后优先使用此命令。sudo systemctl reload sshd
 
高级管理:设置SSH服务开机自启
对于服务器而言,通常需要确保SSH服务在系统重启后能自动运行,以便管理员能够随时进行远程管理。
- 启用开机自启:此命令会创建相应的符号链接,确保
sshd在每次系统启动时自动运行。sudo systemctl enable sshd
 - 禁用开机自启:如果出于安全考虑,不希望服务器默认开启SSH,可以禁用它。
sudo systemctl disable sshd
 
为了方便查阅,下表小编总结了systemctl管理sshd服务的常用命令:
| 功能描述 | 命令 | 
|---|---|
| 查看服务状态 | systemctl status sshd | 
| 启动服务 | systemctl start sshd | 
| 停止服务 | systemctl stop sshd | 
| 重启服务 | systemctl restart sshd | 
| 重新加载配置 | systemctl reload sshd | 
| 启用开机自启 | systemctl enable sshd | 
| 禁用开机自启 | systemctl disable sshd | 
核心配置:增强SSH安全性
管理SSH服务不仅包括控制其启停,更关键在于通过修改其主配置文件/etc/ssh/sshd_config来加强安全性,在修改此文件前,建议先备份。

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
使用文本编辑器(如vi或nano)打开配置文件:
sudo vi /etc/ssh/sshd_config
修改SSH默认端口
SSH的默认端口是22,这是自动化攻击工具的首要扫描目标,将其更改为一个不常用的高位端口(如2222)可以有效减少恶意扫描。
找到#Port 22这一行,去掉注释并修改端口号:
Port 2222
重要提示:修改端口后,必须确保防火墙放行了新端口,否则将无法连接。
禁用root用户远程登录
允许root用户直接通过SSH登录存在巨大安全风险,一旦root密码被破解,攻击者将获得服务器的完全控制权,最佳实践是创建一个普通用户,通过该用户登录后再使用su或sudo提权。
找到#PermitRootLogin yes,修改为:
PermitRootLogin no
限制允许登录的用户

通过AllowUsers指令,可以精确控制哪些用户或来自特定IP的用户能够通过SSH登录,实现访问控制的白名单机制。
在文件末尾添加如下行:
AllowUsers admin user1@192.168.1.100
这表示只允许admin用户从任何IP登录,以及user1用户只能从168.1.100这个IP地址登录。
应用配置与防火墙设置
修改完sshd_config文件后,需要重新加载服务使配置生效,如果修改了端口,还需配置防火墙。
# 重新加载SSH配置 sudo systemctl reload sshd # 假设新端口为2222,使用firewalld放行新端口 sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
至此,您已经掌握了在CentOS上设置SSH状态的核心知识,包括服务管理、开机自启以及关键的安全加固配置,遵循这些步骤,可以显著提升服务器的远程访问安全性和管理灵活性。
相关问答FAQs
问题1:修改SSH端口后无法连接,该怎么办? 解答:修改SSH端口后无法连接是一个常见问题,通常由以下几个原因导致:
- SSH服务未重新加载:请确保已执行
sudo systemctl reload sshd或sudo systemctl restart sshd使新端口配置生效。 - 防火墙未放行新端口:这是最常见的原因,请检查
firewalld或iptables规则,确保新端口(如2222)已被允许通过,可以使用sudo firewall-cmd --list-ports来查看已放行的端口列表。 - SELinux限制:如果SELinux处于
Enforcing模式,它可能会阻止SSH在非标准端口上监听,您需要使用semanage命令为新端口添加SELinux上下文:sudo semanage port -a -t ssh_port_t -p tcp 2222,如果提示semanage命令未找到,请先安装policycoreutils-python-utils包。 - 客户端连接错误:确保在SSH客户端中使用了正确的端口号,
ssh -p 2222 user@your_server_ip。 
问题2:systemctl 和 service 命令有什么区别?
解答:service命令是传统的SysVinit系统(用于CentOS 6及更早版本)中用来管理服务的工具,而systemctl是systemd系统(用于CentOS 7及更新版本)的统一管理工具。systemctl不仅包含了service的所有功能,还提供了更强大的特性,
- 按需启动:
systemd可以按需启动服务,提高系统启动速度。 - 服务依赖管理:
systemd能更智能地处理服务间的依赖关系。 - 资源控制:可以通过
cgroups对服务的资源(如CPU、内存)进行限制。 - 并行启动:能够并行启动多个服务,大幅缩短开机时间。
在现代CentOS系统中,虽然为了向后兼容,
service命令仍然可用(它通常是一个指向systemctl的符号链接),但强烈推荐直接使用功能更全面、更强大的systemctl命令。