SSH 安全连接
I. 环境准备
📌 环境说明:
本实践基于 AlmaLinux 8.x , 适用 AlmaLinux 9.x , OS 版本查看:cat /etc/redhat-release
1.1 更改 SELinux 模式
⚠️ 警告:
禁用 SELinux 会降低您的系统安全性。如果您的场景需要在生产环境中执行调试,请临时使用permissive
模式,而不是永久禁用 SELinux。如需有关 permissive 模式的更多信息,请参考 更改 SELinux 状态和模式⭐ 。
1、在您选择的文本编辑器中打开 /etc/selinux/config 文件,例如:
|
|
2、配置 SELINUX=permissive 选项:
|
|
3、重启系统
|
|
4、验证
|
|
1.2 启用防火墙
1、查看防火墙状态
|
|
2、如果未启用,使用以下命令启动 Firewalld:
|
|
更多用法参考: Firewalld 快速配置⭐
1.3 配置服务器静态 IP
📌 操作说明:
Red Hat Enterprise Linux 为管理员提供不同的选项来配置以太网连接。本实践在命令行中使用nmcli
配置连接。
📢 前提条件:
服务器配置中存在物理或虚拟以太网网络接口控制器(NIC)。
1、列出 NetworkManager 连接配置文件:
|
|
2、配置 IPv4 设置(将 ens160
替换为当前系统配置文件名称):
- 要设置静态 IPv4 地址、网络掩码、默认网关、DNS 服务器,请输入:
|
|
- 要使用 DHCP,请输入:
|
|
3、激活配置文件:
|
|
或重启网络服务
💡 配置文件存储位置:
- 在 AlmaLinux 8.x 中,网络配置的存储位置在:
/etc/sysconfig/network-scripts/
- 在 AlmaLinux 9.x 中,密钥文件的新默认存储位置在:
/etc/NetworkManager/system-connections
1.4 验证配置
1、显示 NIC 的 IP 设置:
|
|
💡 专业提示:
- 使用
-c
选项以获得更易读的彩色输出:ip -c a
。ip
命令允许缩写,因此ip a
、ip addr
和ip address
是等效的。
2、显示 IPv4 默认网关:
|
|
3、显示 DNS 设置:
|
|
4、查看网络服务状态
|
|
1.5 禁用 IPv6 (可选)
1、(可选)显示网络连接列表:
|
|
2、将连接的 ipv6.method
参数设为 disabled
:
|
|
3、重启网络连接:
|
|
4、显示设备的 IP 设置:
|
|
如果没有显示 inet6
条目,则 IPv6
在该设备上被禁用。
5、验证 /proc/sys/net/ipv6/conf/ens160/disable_ipv6
文件现在是否包含值 1
:
|
|
值 1
表示针对该设备禁用 IPv6。
1.6 nmcli 扩展
1、如果要创建额外的连接配置文件,请输入:
|
|
2、可选:重命名连接配置文件:
|
|
3、显示连接配置文件的当前设置:
|
|
4、配置 IPv6 设置:
- 要使用无状态地址自动配置(SLAAC),请输入:
|
|
- 要设置静态 IPv6 地址、网络掩码、默认网关、DNS 服务器和搜索域,请输入:
|
|
5、要在配置文件中自定义其他设置,请使用以下命令:
|
|
将值用空格或分号括在引号中。
II. SSH 连接
2.1 备份 SSH 配置
❗ 建议:
为避免因错误修改默认配置导致无法还原,建议一开始就对原始配置文件进行备份。
📌 参数说明:
cp -avx
会递归地复制目录结构,保留所有文件属性,并且仅限于同一文件系统内的文件。
-a
(archive): 该选项是一个组合选项,等同于-dR --preserve=all
。具体来说,它会递归地复制目录,并保留符号链接、文件属性(如权限、时间戳、所有者等),并且会尽可能保留源文件的所有特性。-v
(verbose): 在复制过程中,cp
会显示正在复制的文件名。这有助于用户跟踪哪些文件正在被复制。-x
(one file system): 只复制与源文件系统在同一文件系统上的文件。它会阻止跨文件系统的复制,例如,如果你在根目录下执行这个命令,它不会复制挂载的其他文件系统的内容。
2.2 允许 root 密码登录
📢 注意:在 RHEL 9.x 中,默认情况下,root 用户通过 SSH 登录通常是禁用的。
1、编辑 SSH 配置文件:
|
|
💡 建议:
如果是 AlmaLinux 9.x 环境,建议自定义 SSH 配置文件,如:vi /etc/ssh/sshd_config.d/custom-rules.conf
2、添加如下配置:
3、检查配置文件是否有误
|
|
4、重启 SSH 服务:
|
|
2.3 SSH 工具连接
III. 进阶配置(推荐)
3.1 修改 SSH 默认端口
1、打开 SSH 配置文件添加自定义端口
⚠️ 重要提醒:
在未完全测通自定义端口前,请不要关闭默认22
端口,以防丢失与服务器的连接。
重启 SSH 服务以应用更改:
|
|
2、防火墙放通端口:
💡Tips:
默认情况下,firewalld
使用的默认区域是public
。可以使用firewall-cmd --get-default-zone
命令查看默认区域。
|
|
列出已允许的服务和端口:
|
|
💡Tips:
要查看public
区域的开放端口,可以运行:firewall-cmd --zone=public --list-ports
更新防火墙规则:
|
|
3、在 SSH 工具中配置新端口测试连接。
❌ 连接失败?
如果使用的是云服务器,可能还需要在云控制台“安全组”中放通端口。
4、新端口测试连接成功后,编辑 SSH 配置文件,删除 22
端口并重启 SSH 服务。
5、再次使用新端口测试连接,确保配置成功。
3.2 使用 SSH 密钥登录
1、制作 SSH 密钥对:
|
|
📌 参数说明:
-o
:(小写)使用新的 OpenSSH 格式(而不是 PEM 格式)保存私钥。实际上,当您将密钥类型指定为ed25519
时,就隐含了此选项;-a
:保存私钥时,该选项指定了所使用的 KDF(密钥生成函数,目前为bcrypt_pbkdf(3)
)轮数。 轮数越多,口令验证速度越慢,密码被盗时的暴力破解能力越强。 默认值为16
轮。-t
:指定要创建的密钥类型。 可能的值有ecdsa
、ecdsa-sk
、ed25519
、ed25519-sk
或rsa
。-C
:用于指定注释的选项。它是纯粹的信息,可以是任何东西。但它通常填充<login>@<hostname>
谁生成了密钥;-f
:指定生成的密钥文件的文件名。如果您希望 SSH 代理自动发现它,则必须将它存储在主目录中的默认.ssh
目录中;-i
:读取未加密的ssh-v2
兼容的私钥/公钥文件,然后在标准输出设备上显示 openssh 兼容的私钥/公钥;-l
:显示公钥文件的指纹数据;-N
:提供一个新密语;-P
:提供(旧)密语;-q
:静默模式;
输出示例:
|
|
2、将生成的公钥添加到本地服务器,请使用以下命令:
📌 将公钥添加到远程服务器:
ssh-copy-id -i /path/to/host_ed25519.pub user@remote_host
3、编辑 SSH 配置文件以确保其允许基于密钥的认证(默认已开启):
重启 SSH 服务以应用更改:
|
|
4、在连接工具中导入前面生成的私钥,测试 SSH 连接。
📌 分析 SSH 成功的登录日志判断登录方式:
journalctl -u sshd | grep 'Accepted'
- 通过 密码登录 的记录通常会包含类似以下内容:
Accepted password for root from 192.168.31.101 port 53321 ssh2
- 通过 密钥登录 的记录会显示:
Accepted publickey for root from 192.168.31.101 port 54035 ssh2: ED25519 SHA256:...
3.3 禁用 root 及密码登录
1、确认连接工具可以使用 SSH 密钥正常登录服务器。
2、编辑 SSH 配置文件,禁用 root 及密码登录:
3、检查配置文件错误
|
|
重启 SSH 服务以应用更改:
|
|
IV. 配置 SSH 客户端(可选)
如果你有多个 SSH 密钥或不同的配置需求,可以通过编辑本地的 ~/.ssh/config
文件来简化连接过程:
之后,你可以简单地通过以下命令连接到服务器:
|
|