I. 环境准备
📌 环境说明:
本实践基于 AlmaLinux 8.x , 适用 AlmaLinux 9.x , OS 版本查看:cat /etc/redhat-release
1.1 更改 SELinux 模式
⚠️ 警告:
禁用 SELinux 会降低您的系统安全性。如果您的场景需要在生产环境中执行调试,请临时使用permissive
模式,而不是永久禁用 SELinux。如需有关 permissive 模式的更多信息,请参考 SELinux 模式变更 。
1、在您选择的文本编辑器中打开 /etc/selinux/config 文件,例如:
1vi /etc/selinux/config
2、配置 SELINUX=permissive 选项:
1# This file controls the state of SELinux on the system.
2# SELINUX= can take one of these three values:
3# enforcing - SELinux security policy is enforced.
4# permissive - SELinux prints warnings instead of enforcing.
5# disabled - No SELinux policy is loaded.
6SELINUX=permissive
7# SELINUXTYPE= can take one of these two values:
8# targeted - Targeted processes are protected,
9# mls - Multi Level Security protection.
10SELINUXTYPE=targeted
3、重启系统
1reboot
4、验证
1getenforce
1.2 启用防火墙
1、查看防火墙状态
1firewall-cmd --state
2、如果未启用,使用以下命令启动 Firewalld:
1systemctl enable firewalld --now
更多用法参考: Firewalld 简单配置
1.3 配置服务器静态 IP
📌 操作说明:
Red Hat Enterprise Linux 为管理员提供不同的选项来配置以太网连接。本实践在命令行中使用nmcli
配置连接。
📢 前提条件:
服务器配置中存在物理或虚拟以太网网络接口控制器(NIC)。
1、列出 NetworkManager 连接配置文件:
1nmcli connection show
2、配置 IPv4 设置(将 ens160
替换为当前系统配置文件名称):
- 要设置静态 IPv4 地址、网络掩码、默认网关、DNS 服务器,请输入:
1nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.2.101/24 ipv4.gateway 192.0.2.254 ipv4.dns "114.114.114.114, 223.5.5.5"
- 要使用 DHCP,请输入:
1nmcli connection modify ens160 ipv4.method auto
3、激活配置文件:
1nmcli connection up ens160
或重启网络服务
1nmcli networking off
2nmcli networking on
💡 配置文件存储位置:
- 在 AlmaLinux 8.x 中,网络配置的存储位置在:
/etc/sysconfig/network-scripts/
- 在 AlmaLinux 9.x 中,密钥文件的新默认存储位置在:
/etc/NetworkManager/system-connections
1.4 验证配置
1、显示 NIC 的 IP 设置:
1ip address show ens160
💡 专业提示:
- 使用
-c
选项以获得更易读的彩色输出:ip -c a
。ip
命令允许缩写,因此ip a
、ip addr
和ip address
是等效的。
2、显示 IPv4 默认网关:
1ip route show default
3、显示 DNS 设置:
1cat /etc/resolv.conf
4、查看网络服务状态
1systemctl status NetworkManager
1.5 禁用 IPv6 (可选)
1、(可选)显示网络连接列表:
1nmcli connection show
2、将连接的 ipv6.method
参数设为 disabled
:
1nmcli connection modify ens160 ipv6.method "disabled"
3、重启网络连接:
1nmcli connection up ens160
4、显示设备的 IP 设置:
1ip address show ens160
如果没有显示 inet6
条目,则 IPv6
在该设备上被禁用。
5、验证 /proc/sys/net/ipv6/conf/ens160/disable_ipv6
文件现在是否包含值 1
:
1cat /proc/sys/net/ipv6/conf/ens160/disable_ipv6
值 1
表示针对该设备禁用 IPv6。
1.6 nmcli 扩展
1、如果要创建额外的连接配置文件,请输入:
1nmcli connection add con-name <connection-name> ifname <device-name> type ethernet
2、可选:重命名连接配置文件:
1nmcli connection modify "ens160" connection.id "Internal-LAN"
3、显示连接配置文件的当前设置:
1nmcli connection show Internal-LAN
4、配置 IPv6 设置:
- 要使用无状态地址自动配置(SLAAC),请输入:
1nmcli connection modify Internal-LAN ipv6.method auto
- 要设置静态 IPv6 地址、网络掩码、默认网关、DNS 服务器和搜索域,请输入:
1nmcli connection modify Internal-LAN ipv6.method manual ipv6.addresses 2001:db8:1::fffe/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
5、要在配置文件中自定义其他设置,请使用以下命令:
1nmcli connection modify <connection-name> <setting> <value>
将值用空格或分号括在引号中。
II. SSH 连接
2.1 备份 SSH 配置
❗ 建议:
为避免因错误修改默认配置导致无法还原,建议一开始就对原始配置文件进行备份。
1cd /etc/ssh/
2cp -avx sshd_config sshd_config.bak
📌 参数说明:
cp -avx
会递归地复制目录结构,保留所有文件属性,并且仅限于同一文件系统内的文件。
-a
(archive): 该选项是一个组合选项,等同于-dR --preserve=all
。具体来说,它会递归地复制目录,并保留符号链接、文件属性(如权限、时间戳、所有者等),并且会尽可能保留源文件的所有特性。-v
(verbose): 在复制过程中,cp
会显示正在复制的文件名。这有助于用户跟踪哪些文件正在被复制。-x
(one file system): 只复制与源文件系统在同一文件系统上的文件。它会阻止跨文件系统的复制,例如,如果你在根目录下执行这个命令,它不会复制挂载的其他文件系统的内容。
2.2 允许 root 密码登录
📢 注意:在 RHEL 9.x 中,默认情况下,root 用户通过 SSH 登录通常是禁用的。
1、编辑 SSH 配置文件:
1vi sshd_config
💡 建议:
如果是 AlmaLinux 9.x 环境,建议自定义 SSH 配置文件,如:vi /etc/ssh/sshd_config.d/custom-rules.conf
2、添加如下配置:
1PermitRootLogin yes
2PasswordAuthentication yes
3、检查配置文件是否有误
1sshd -t
4、重启 SSH 服务:
1systemctl restart sshd
2.3 SSH 工具连接
III. 进阶配置(推荐)
3.1 修改 SSH 默认端口
1、打开 SSH 配置文件添加自定义端口
⚠️ 重要提醒:
在未完全测通自定义端口前,请不要关闭默认22
端口,以防丢失与服务器的连接。
1Port 22
2Port 2202
重启 SSH 服务以应用更改:
1systemctl restart sshd
2、防火墙放通端口:
💡Tips:
默认情况下,firewalld
使用的默认区域是public
。可以使用firewall-cmd --get-default-zone
命令查看默认区域。
1firewall-cmd --permanent --add-port=2202/tcp
列出已允许的服务和端口:
1firewall-cmd --permanent --list-all
💡Tips:
要查看public
区域的开放端口,可以运行:firewall-cmd --zone=public --list-ports
更新防火墙规则:
1firewall-cmd --reload
3、在 SSH 工具中配置新端口测试连接。
❌ 连接失败?
如果使用的是云服务器,可能还需要在云控制台“安全组”中放通端口。
4、新端口测试连接成功后,编辑 SSH 配置文件,删除 22
端口并重启 SSH 服务。
5、再次使用新端口测试连接,确保配置成功。
3.2 使用 SSH 密钥登录
1、制作 SSH 密钥对:
1ssh-keygen -t ed25519 -f ./your_host_name_ed25519 -C "your_email@example.com"
📌 参数说明:
-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
:静默模式;
输出示例:
1[root@host ~]# ssh-keygen -t ed25519 -f host_ed25519 -C "user@example.com"
2Generating public/private ed25519 key pair.
3Enter passphrase (empty for no passphrase): <== 输入口令(无口令为空)
4Enter same passphrase again: <== 再输入一遍口令
5Your identification has been saved in host_ed25519. <== 私钥
6Your public key has been saved in host_ed25519.pub. <== 公钥
7The key fingerprint is:
8SHA256:piEO2PzHsfN22mt52TZx/XpKG8vCsUHkJhvesG2EDKI user@example.com
9The key's randomart image is:
10+--[ED25519 256]--+
11| |
12| . . . |
13| . . o + |
14| + E * = |
15|. + . o S. % .|
16| + o * + * . o|
17| o * + *oo.|
18| . o..+ *o++o|
19| .o+oo o*= |
20+----[SHA256]-----+
2、将生成的公钥添加到本地服务器,请使用以下命令:
1# 切换到当前用户目录
2cd ~
3# 创建 ssh 隐藏目录
4mkdir .ssh
5# 把公钥复制到 ssh 隐藏目录
6cp host_ed25519.pub .ssh/
7#修改 ssh 隐藏目录权限
8chmod 700 .ssh/
9# 切换到 ssh 隐藏目录
10cd .ssh/
11# 注册公钥
12cat host_ed25519.pub >> authorized_keys
13# 修改授权密钥文件权限
14chmod 600 authorized_keys
📌 将公钥添加到远程服务器:
ssh-copy-id -i /path/to/host_ed25519.pub user@remote_host
3、编辑 SSH 配置文件以确保其允许基于密钥的认证(默认已开启):
1PubkeyAuthentication yes
2AuthorizedKeysFile .ssh/authorized_keys
重启 SSH 服务以应用更改:
1systemctl restart sshd
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 及密码登录:
1# 禁用 root SSH 远程登录
2PermitRootLogin no
3# 禁用密码登录
4PasswordAuthentication no
5# 禁用 DNS 反向解析
6UseDNS no
3、检查配置文件错误
1sshd -t
重启 SSH 服务以应用更改:
1systemctl restart sshd
IV. 配置 SSH 客户端(可选)
如果你有多个 SSH 密钥或不同的配置需求,可以通过编辑本地的 ~/.ssh/config
文件来简化连接过程:
1Host myserver
2 HostName remote_host
3 User username
4 IdentityFile ~/.ssh/host_ed25519
之后,你可以简单地通过以下命令连接到服务器:
1ssh myserver