10.linux配置和保护SSH
Linux 配置和保护 SSH
1. SSH 基础
- SSH (Secure Shell): 一种安全的网络协议,用于在不安全的网络上安全地操作网络服务。
- 功能: 提供了一个与 Linux 系统交互的加密命令行界面,接收你的命令并将其传输给内核以管理硬件。
- 相关组件:
- 软件包: OpenSSH
- 服务守护进程:
sshd - 默认端口: 22
2. 增强 SSH 安全性的配置
尽管 SSH 本身是安全的(通信全程加密),但管理员应采取额外措施来进一步加固 SSH 服务。
2.1. 配置空闲超时
- 目的: 自动断开长时间处于空闲状态的 SSH 会话,防止未经授权的访问。
- 操作步骤:
- 以
root用户身份编辑/etc/ssh/sshd_config文件。 - 添加或修改以下两行:
1
2
3
4# 设置客户端存活探测间隔为600秒(10分钟)
ClientAliveInterval 600
# 设置在断开连接前,客户端可以无响应的次数为0
ClientAliveCountMax 0 - 重启 SSH 服务以应用更改:
1
# systemctl restart sshd
- 以
- 注解:
ClientAliveInterval设置了服务器向客户端发送“空消息”以检查其是否仍然连接的时间间隔(以秒为单位)。如果客户端在ClientAliveInterval * ClientAliveCountMax秒内没有响应,连接将被关闭。

在进行修改配置文件之前,强烈建议你先使用cp命令进行备份,这样一旦出了问题你还能还原。
之后我们使用vi来编辑这个配置文件,使用g直达文件末尾,之后o另起新行并且开始插入以下内容:

最后保存并退出,重启服务。

2.2. 禁用 root 用户登录
- 目的: 阻止直接使用
root账户进行远程登录,这是系统安全的基本最佳实践之一。 - 操作步骤:
- 编辑
/etc/ssh/sshd_config文件。 - 将
PermitRootLogin yes修改为no:1
PermitRootLogin no
- 重启
sshd服务。
- 编辑
- 注解: 禁用 root 登录后,管理员应使用普通用户登录,然后使用
su或sudo命令提权至 root,这增加了系统的可审计性。

默认是prohibit-password,我们修改成no。
保存并退出,别忘了重启服务。
2.3. 禁止空密码登录
- 目的: 增加安全性,防止配置了空密码的账户通过远程 SSH 登录。
- 操作步骤:
- 编辑
/etc/ssh/sshd_config文件。 - 找到并确保以下行的设置为
no(如果被注释,请取消注释):1
PermitEmptyPasswords no
- 重启
sshd服务。
- 编辑

取消注释,保存并退出。

别忘了重启服务。
2.4. 限制特定用户的 SSH 访问
- 目的: 作为额外的安全层,只允许授权用户列表中的用户进行 SSH 登录。
- 操作步骤:
- 编辑
/etc/ssh/sshd_config文件。 - 添加
AllowUsers指令,后面跟上允许登录的用户名列表:1
AllowUsers user1 user2
- 重启
sshd服务。
- 编辑

2.5. 更改默认 SSH 端口
- 目的: 默认的 22 端口是自动化攻击的常见目标。更改端口可以减少被扫描和攻击的风险。
- 操作步骤:
- 编辑
/etc/ssh/sshd_config文件。 - 找到
#Port 22这一行,取消注释并修改为新的端口号(例如2222):1
Port 2222
- 重启
sshd服务。
- 编辑
- 注解: 更改端口后,连接时需要明确指定新端口,例如
ssh user@hostname -p 2222。同时,需要确保新的端口在防火墙(如 firewalld)和 SELinux 策略中是允许的。

3. 使用 SSH 密钥实现无密码认证
- 目的: 提高安全性和便利性,尤其适用于自动化脚本和频繁登录的场景。
- 工作原理: 使用公钥/私钥对进行身份验证,而不是传统的密码。
- 操作步骤:
- 在客户端生成密钥对: 这会在
1
# ssh-keygen
~/.ssh/目录下创建id_rsa(私钥) 和id_rsa.pub(公钥)。 - 将公钥复制到服务器: 此命令会将客户端的公钥追加到服务器上
1
# ssh-copy-id <user>@<server_ip>
~/.ssh/authorized_keys文件中。 - 无密码登录: 完成以上步骤后,从客户端 SSH 到服务器将不再需要输入密码。
1
# ssh <user>@<server_ip>
- 在客户端生成密钥对:
这里我们就不做示范了。如果你有这个需求的话你是自己一定会实操一次的。我曾经也做过这样的事情,在我之前的一篇ssh文章里。不过那篇文章的图床全部挂掉了,有一些可惜。
这里最后简单介绍一下公私钥是什么:
- 公钥 (Public Key): 可以公开分享给任何人。它用于加密数据或验证数字签名。
- 私钥 (Private Key): 必须严格保密,只能由所有者持有。它用于解密公钥加密的数据或创建数字签名。
非对称加密 (Asymmetric Encryption):
- 原理: 非对称加密使用一对密钥,即公钥和私钥。公钥用于加密数据,私钥用于解密数据;反之,私钥也可以用于签名,公钥用于验证签名。
- 公钥加密,私钥解密: 当A想向B发送加密信息时,A使用B的公钥加密信息,然后发送给B。B收到信息后,使用自己的私钥解密。由于只有B拥有其私钥,因此只有B能解密该信息,确保了信息的机密性。
- 私钥签名,公钥验证: 当A想证明信息确实由自己发出时,A使用自己的私钥对信息进行签名。B收到信息和签名后,使用A的公钥验证签名的有效性。如果验证成功,则证明信息确实由A发出,且未被篡改,确保了信息的完整性和不可否认性。
- 与公私钥的关系: 公钥和私钥是非对称加密技术的核心组成部分。它们成对生成,数学上相关联,但无法从其中一个推导出另一个。这种机制使得在不安全通道上进行安全通信成为可能。