本系列:SSH 安全加固实战(共 5 篇) ① 为什么你的 SSH 正在裸奔 → ② 先读懂配置文件再动手(本篇) → ③ 用密钥认证告别密码 → ④ 限制谁能登录、从哪里登录 → ⑤ 防暴力破解与安全审计
第 1 篇我们确认了"门是裸的"。很多人这时候会急着改配置,结果改错直接把自己锁在门外。这篇先打地基:配置文件在哪、每个关键开关什么意思、以及怎么改才能万无一失地不锁死自己。最后给一份可直接套用的安全基线。
两套配置别搞混
Linux 上有两套 SSH 配置,新手极易混淆:
| 文件 | 作用对象 | 服务器路径示例 |
|---|---|---|
ssh_config | 控制本机作为客户端出去连接别人 | /etc/ssh/ssh_config |
sshd_config | 控制本机作为服务端接受别人连进来 | /etc/ssh/sshd_config |
我们要加固的是被连进来的那一侧,也就是服务端,所以一切改动都对着 sshd_config。
提示框:
sshd_config不一定在/etc/ssh/,可先定位。Debian/Ubuntu 通常就在/etc/ssh/sshd_config;想确认服务实际用的配置文件,可执行sshd -T(下方会讲)。
读懂关键指令
用编辑器打开配置文件(这里用 sudo + 编辑器,Ubuntu 可用 nano,RHEL 系常配 vim):
sudo vim /etc/ssh/sshd_config # RHEL/CentOS/Rocky 常用 vim
sudo nano /etc/ssh/sshd_config # Debian/Ubuntu 若偏好 nano
下面逐条看这些"命门"开关:
Port 22 # 监听端口,默认 22(改端口利弊见第 4 篇)
PermitRootLogin prohibit-password # 是否允许 root 直接登录
PasswordAuthentication yes # 是否允许密码登录
PubkeyAuthentication yes # 是否允许公钥登录
逐一解释:
Port:监听端口。默认 22,是扫描器的头号目标。PermitRootLogin:控制 root 能否 SSH 登录。yes=允许任意方式、prohibit-password=仅允许密钥(禁止密码)、no=禁止 root 直登(推荐,改用 sudo)。永远别开成yes。PasswordAuthentication:是否允许密码登录。破解就是冲它来的,用密钥后应改为no(第 3 篇详解)。PubkeyAuthentication:是否接受公钥登录,建议保持yes。
提示框:版本差异——
prohibit-password是新版 OpenSSH 写法,老版本用without-password,含义相同(仅密钥)。写no或prohibit-password通常都安全。
关键一步:别"锁死"自己
SSH 是服务器唯一入口,改配置时最怕的是:systemctl restart ssh 后连不上,人又不在机房。正确的安全改法分四步:
第 1 步:先开一个"逃生会话"并保持登录
改动前,先保留一个已登录的终端窗口不要关。一旦配置出问题,至少还有一个活着的会话能救命。
第 2 步:只改你懂的,一次只改一点
不要一次堆十处改动。每改一处、验证一处、回退容易。
第 3 步:改完先校验语法,再重载而不是重启
sshd 自带语法检查,改完先跑:
sudo sshd -t # 语法正确无输出;有错会打印具体行号
提示框:Debian 系
sshd -t可能需要sudo /usr/sbin/sshd -t;RHEL 系通常直接sshd -t。若提示找不到sshd,用which sshd或发行版的完整路径。
语法 OK 后,用重载(reload)而非重启(restart)。重载不中断已建立的会话,只是让新连接用新配置:
# Debian / Ubuntu
sudo systemctl reload ssh
# RHEL / CentOS / Rocky
sudo systemctl reload sshd
# 老系统(无 systemd)可尝试
sudo service ssh reload # 或 service sshd reload
提示框:服务名差异——Debian/Ubuntu 服务名是
ssh,RHEL/CentOS/Rocky 是sshd。不确定时systemctl list-units | grep -i ssh看一眼真实名字。若没有 systemd(很老的发行版),用service sshd reload。
第 4 步:别关逃生门,另开一个窗口测试新配置
保持逃生会话,另开一个终端用新配置连一次。确认能连上、且用的是你想要的方式(比如密钥)后,才考虑是否关闭逃生会话。
黄金法则:改动某开关并成功验证前,永远不要关闭你手里最后一条已登录会话。
直接可套用的安全基线
把下面这段追加或合并到 sshd_config 尾部(可先注释掉 PasswordAuthentication,第 3 篇配好密钥再放开 no):
# ---- 安全基线(结合后续文章逐步启用)----
PermitRootLogin prohibit-password # 禁止 root 用密码直登,后续可改 no
PubkeyAuthentication yes
PasswordAuthentication no # 先配好密钥再启用,见第 3 篇
ChallengeResponseAuthentication no # 禁用额外的密码挑战
提示框:务必配合第 3 篇——在你确认能用密钥登录之前,别把
PasswordAuthentication设成no,否则会把自己关在门外。这也是为什么前面强调"逃生门 + 另开会话验证"。
本篇小结
- 加固改的是
/etc/ssh/sshd_config(服务端),不是ssh_config(客户端)。 - 关键开关:
Port、PermitRootLogin、PasswordAuthentication、PubkeyAuthentication。 - 安全改配置四步:留逃生会话 → 一次改一点 →
sshd -t校验 →systemctl reload+ 另开会话测试。 prohibit-password新旧版本写法有差异,systemd reloadvsservice、服务名sshvssshd因发行版而异。
下一篇预告
你已经能安全地改配置了。第 3 篇进入全系列最关键的一步:生成密钥对、用密钥登录、彻底关掉密码登录。这是告别爆破最有效的手段。
现在可以先按本篇基线配置里可安全启用的项(root 禁止密码、保持密钥开启)改起来,记得留好逃生会话。我们下一篇见。