Linux 系统安全加固:SSH 防护、超时设置、密码策略与密钥登录
加固项核心配置/命令作用SSH 安全禁止 root 登录、改端口、限制尝试次数、白名单空闲超时添加TMOUT自动注销空闲终端密码有效期chage强制定期改密密钥登录MobaXterm 生成密钥对 +免密登录,可禁用密码认证建议在测试环境中验证后再应用到生产服务器。坚持最小权限原则和纵深防御,可显著提升系统安全性。原创作者:浅了。
本文以 openEuler / CentOS 环境为例(也可在 Metasploitable 2 靶机上练习命令),介绍四项常用安全加固措施:限制 SSH 远程登录、设置全局空闲自动注销、密码有效期策略、以及使用 MobaXterm 生成密钥对实现免密登录。每项操作均附命令示例及截图提示,适合初学者或运维人员参考。
1. SSH 服务安全加固(/etc/ssh/sshd_config)
SSH 是 Linux 远程管理的核心服务,修改配置文件可大幅提升安全性。执行:
sudo vim /etc/ssh/sshd_config
执行这个命令后我们成功进入到了ssh服务的文件,后续我们对于ssh服务进行的安全加固就是在这个文件中进行修改配置。
1.1 禁止 root 用户直接远程登录
找到或添加:
PermitRootLogin no
这里有一点,我们发现没有某一行的配置的时候我们需要添加某一行,最好添加在文件末尾,因为如果前面其实是有这一样的话,我们写在后面的配置是可以覆盖的,并不会造成错误。但是为了避免混淆、难以维护,需要仔细检查到底有没有。我们通过搜索发现是有这一行的,将原本的yes置为no,保存重启ssh服务后就成功关闭了root的远程登录。
这样攻击者无法通过 root 身份尝试爆破,需先登录普通用户再提权。
1.2 修改默认端口
将 22 改为其他高位端口(例如 58222),减少被批量扫描的概率:
Port 58222
注意:修改后需在防火墙放行新端口,并确保 SELinux 策略允许(如果启用)。
我们通过搜索找到 Port 直接修改后面的端口,修改后ssh服务的端口就变了,这样就减少了被批量扫描的概率,增加了安全性。
1.3 设置空闲超时自动断开
防止用户离开后终端长时间被占用:
text
ClientAliveInterval 300 # 服务器每隔 300 秒向客户端发送一个加密的“心跳”请求,检测客户端是否仍在响应
ClientAliveCountMax 0 # 如果心跳请求没有得到回复,允许连续失败的次数为 0 —— 即第一次失败就立即断开连接。
文件中并没有这两行,所以我们直接在文件末尾添加上就行。
ClientAliveInterval 和 ClientAliveCountMax 用于定期探测 SSH 客户端是否仍存活,若客户端异常断开未正常关闭连接,则服务器能及时发现并释放僵尸连接,长期保留着这些僵尸连接会占用大量资源,影响服务器运行效率。
1.4 限制最大认证尝试次数
避免攻击者短时间内尝试大量密码:
MaxAuthTries 3
文件中还是没有这一行,直接在文件末尾添加。
超过 3 次错误即断开连接。
1.5 添加用户白名单并限制来源主机
只允许特定用户从指定 IP 或网段登录,例如:
AllowUsers alice@192.168.1. 
我们直接在末尾加上这一行就行了。
这里是简写形式,可以支持通配符。
表示用户 alice 只能从 192.168.1.0/24 网段登录,bob 只能从 10.0.0.0/8 网段登录。
1.6 重启服务使配置生效
所有的ssh配置修改后需要重启ssh服务才可以,所以我们现在需要重启ssh服务。
sudo /etc/init.d/ssh restart![]()
这里就成功重启了服务,刚才我们配置的已经生效了。
我们来试试是否成功生效。
断开连接后可以看到我们原来的会话不能用了,这是因为我们更换了端口,所以我们需要重新建立连接

我们更换端口后可以连接上了,并且尝试登录root就算输入了正确的密码也不能成功登录了,说明我们的ssh配置生效了。
2. 设置全局空闲超时自动注销(/etc/profile)
通过系统环境变量 TMOUT 可对所有登录用户(包括本地和远程)设置空闲超时。编辑 /etc/profile:
sudo vim /etc/profile
在末尾添加:
export TMOUT=30
保存后,新登录的会话将在无操作 30 秒后自动注销。当前会话执行 source /etc/profile 也可立即生效。
3. 密码有效期策略(/etc/login.defs 与 chage)
3.1 对新用户生效的配置(/etc/login.defs)
编辑 /etc/login.defs:
bash
sudo vim /etc/login.defs
修改以下参数:
PASS_MAX_DAYS 90 # 密码最长使用天数
PASS_MIN_DAYS 0 # 密码最短使用天数(0 表示可立即修改)
PASS_WARN_AGE 7 # 过期前提醒天数
这些设置仅对新创建的用户生效。
这样就成功修改了密码策略,表示密码最多使用三天,最短使用0天,最后三天提醒修改密码。
值得注意的是这个配置只能对配置后创建的用户生效,如果要对已经存在的用户进行配置有其他的命令。
3.2 对已存在用户使用 chage 命令
查看某用户的密码有效期:
sudo chage -l 用户名
执行命令我们来看看root用户的密码有效期,可以看到是最多使用99999天,最少0天,最后七天提醒。
设置密码最大有效期(例如 90 天):
sudo chage -M 90 用户名
设置过期前提醒天数:
sudo chage -W 7 用户名
可以看到chage命令通过不同的参数来设置,同时也可以支持一次性设置多个参数来设置。下面我们看看有没有成功设置呢
我们输入查看命令,发现我们修改成功了的。
4. 使用 SSH 密钥对登录(免密码 + 提高安全性)
使用密钥登录可完全替代密码认证,有效防御暴力破解。以下以 MobaXterm 为例。
4.1 在 MobaXterm 中生成密钥对
- 打开moba中生成密钥的界面,可以直接点击图中的加号添加。

2.生成密钥,在新打开的界面输入命令ssh-keygen -t rsa 表示使用rsa来生成密钥,输入命令后会让输入一些选项,这里可以直接一直按enter确认使用默认值,各个选项的意思截图中有标注。
生成完成后我们可以使用ls命令查看密钥
ls .ssh
这就是生成的密钥.pub结尾的就是公钥。
4.2 上传公钥到 Linux 服务器
使用 ssh-copy-id 工具(如果已安装且允许密码登录):
ssh-copy-id -i id_rsa.pub 用户名@服务器IP
可以看到我们成功上传了公钥,需要注意的是,之前我们修改了端口这里需要指向正确的端口,并且用户需要是能够成功登录的用户,之前我们设置了root不能远程登录,所以不可以用root
4.3 配置 MobaXterm 使用私钥登录
-
新建 SSH 会话,填入服务器 IP 和用户名。
-
在
Advanced SSH settings标签页中,勾选Use private key,并选择之前保存的私钥文件。 -
保存会话,双击连接。若私钥无 passphrase 则直接登录;若有 passphrase 会弹出对话框。

设置好后点击是,然后进入登录页面输入可以登录的用户名,这时就会发现不用密码也可以直接登录了。
4.4 (可选)禁用密码登录
确认密钥登录成功后,可以彻底关闭密码认证。编辑 /etc/ssh/sshd_config:
PasswordAuthentication no
重启 SSH 服务 sudo systemctl restart sshd。
5. 总结
本文系统介绍了 Linux 系统中四项基础安全加固措施:
| 加固项 | 核心配置/命令 | 作用 |
|---|---|---|
| SSH 安全 | /etc/ssh/sshd_config |
禁止 root 登录、改端口、限制尝试次数、白名单 |
| 空闲超时 | /etc/profile 添加 TMOUT |
自动注销空闲终端 |
| 密码有效期 | /etc/login.defs + chage |
强制定期改密 |
| 密钥登录 | MobaXterm 生成密钥对 + authorized_keys |
免密登录,可禁用密码认证 |
建议在测试环境中验证后再应用到生产服务器。坚持最小权限原则和纵深防御,可显著提升系统安全性。
原创作者:浅了
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)