ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RHEL9虚拟机部署与SSH远程登录完整实践手册

RHEL9虚拟机部署与SSH远程登录完整实践手册 最近在给一台闲置的台式机搭建 RHEL9 测试环境虚拟机装好后所有操作全部走 SSH 远程登录。整套流程走下来从 VMware 里建虚拟机、挂载 ISO、分区安装到配置 sshd、防火墙、SELinux、密钥免密一路踩了不少坑也把很多细节彻底搞明白了。这篇就是完整的实践手册重点放在虚拟机部署的关键参数、RHEL9 安装时的系统选择以及 SSH 从开启到加固的完整链路。适合刚接触 Linux 服务端的同学也适合已经在用旧版 RHEL、准备升级到 RHEL9 的运维朋友对照检查。1. 部署前先解决三个选择平台、镜像、网络1.1 为什么我选择 RHEL9 跑在虚拟机上RHEL9 是 Red Hat 当前的主力企业级 Linux内核基于 5.14软件包体系成熟生命周期长达 10 年。生产环境里大量存量系统正在从 RHEL7/8 向 RHEL9 迁移这意味着你迟早要面对这套系统的部署方式和管理习惯。个人学习或者内部测试用虚拟机是非常合适的场景装坏了直接删掉重来不用折腾物理机快照一打系统随便折腾这比用实体服务器或者云主机都灵活得多。而且 VMware Workstation Pro 目前对个人用户已经免费不需要到处找破解版这又降低了上手的门槛。虚拟机跑 RHEL9 还有一个额外好处可以在同一台宿主机上同时保留多个版本的测试环境比如一边跑 RHEL8 老系统一边跑 RHEL9 新系统做版本对比或者服务迁移演练非常方便。如果你只是想学 Linux 基础操作其实 VirtualBox 也能做但我的实测感受是 VMware 对 RHEL 系列的支持更顺滑NAT 网络模式下端口转发和文件拖拽都更稳定所以这篇统一按 VMware Workstation Pro 来讲。1.2 ISO 镜像怎么获取虚拟机网络规划注意什么RHEL9 的 ISO 镜像大小大概在 5 到 9GB 之间取决于你下载的是完整 DVD 还是最小化引导。获取途径主要有两条一是 Red Hat 官方的开发者订阅注册账号后可以合法下载 RHEL9 并使用个人学习和测试完全够用二是使用 CentOS Stream 9、Rocky Linux 9 或 AlmaLinux 9 这些 1:1 重建的兼容发行版。它们在包管理和命令行为上和 RHEL9 基本一致用来练手和部署测试环境毫无障碍。我实际测试用的就是官方 ISO但下面所有步骤在 Rockx 系和 CentOS Stream 9 上同样适用。网络规划这块我在创建虚拟机之前就会先想清楚因为后面所有 SSH 连接都依赖这个决定。VMware 默认提供 NAT 模式虚拟机和宿主机之间通过 VMnet8 网卡通信虚拟机可以访问外网宿主机也可以直接访问虚拟机 IP。这个模式最省心适合单机测试或者个人学习。如果你需要让办公网内其他机器也能访问这台虚拟机那就得选桥接模式让虚拟机直接暴露在局域网里。我推荐新手先用 NAT后面再根据需求切桥接。2. 用 VMware 创建 RHEL9 虚拟机并完成安装2.1 创建虚拟机时的关键参数怎么填打开 VMware Workstation新建虚拟机我会选择“自定义高级”而不是“典型”因为典型模式会自动套用很多默认配置不一定适合 RHEL9。硬件兼容性选 Workstation 17.x这样后续如果升级 VMware 版本也能继续使用。操作系统类型选择 Linux版本下拉框里选 Red Hat Enterprise Linux 9 64-bit这一步很重要它决定了 VMware 会按照 RHEL9 的硬件习惯去适配虚拟机。安装来源选“稍后安装操作系统”不要选“安装程序光盘映像文件”。原因是我希望手动控制 ISO 挂载时机避免 VMware 的简易安装模式自动塞进去一堆默认配置反而干扰后续学习。固件类型默认 UEFI 即可RHEL9 对 UEFI 支持很好。处理器给 2 核就够用内存建议 4GB 起步如果宿主机内存充足可以给到 5GB 或 6GB。网络类型选 NATI/O 控制器和磁盘类型保持默认磁盘大小我给的是 40GB存储为单个文件这样虚拟机磁盘性能稍好一些快照后续管理也方便。创建完成后不要急着开机先编辑虚拟机设置在 CD/DVD 选项里挂载你下载好的 RHEL9 ISO并勾选“启动时连接”。然后确认“虚拟化引擎”里的 Intel VT-x/AMD-V 嵌套虚拟化选项按需开启如果后续想在这台虚拟机里再跑 KVM 或嵌套虚拟机这个选项必须预先打开不然后面改起来麻烦。2.2 安装界面里的分区、软件包与 KDUMP 取舍从 ISO 启动后安装器会引导你进入图形安装界面。语言选择按你自己习惯我建议英语因为服务端排错时很多日志和文档都基于英文关键词。接下来主要关注四个入口。安装目的地这里默认是“自动配置分区”使用的是 LVM 逻辑卷管理文件系统是 XFS这个组合对大部分场景都够用。LVM 的好处是后续磁盘空间不够时可以动态扩展逻辑卷不需要重建分区。如果你是新手直接保持默认自动分区就行不用手动去划分 /boot、/、/home 这些目录RHEL9 的自动分区已经足够合理。软件选择这里建议选“最小安装 Minimal Install”不装图形界面。我们主要走 SSH 远程管理图形界面用不上还白白占用内存和磁盘空间。如果后续确实需要图形工具再通过 DNF 补装即可。KDUMP 默认是开启的它是内核崩溃转储机制系统崩溃时保留一份内存转储用于排查问题。但测试环境一般用不到这功能每次开机还会预留一部分内存所以我个人建议在安装界面关闭 KDUMP。安全策略保持默认不选择安装时不会额外套用安全基线。网络和主机名设置里把右上角的以太网开关打开不然装完系统网卡是不启用的后面还得手动激活。主机名可以先设成 rhel9-node01也可以装完再改。2.3 装完系统后我必做的三项收尾安装完成后重启进入系统先登录用户界面无论你创建的是普通用户还是直接配置了 root都应先检查几个基础状态。第一是确认内核版本和系统版本执行 uname -r 查看内核执行 cat /etc/os-release 查看发行版信息确认这就是 RHEL9。第二是确认网卡已经拿到 IP执行 ip addr show 查看地址如果在安装时没有打开网卡这里是空的。第三件最重要就是拍快照。我会先关机或者保持系统刚启动的干净状态然后在 VMware 里右键虚拟机拍摄快照并命名为“clean-install”。这个快照是整个实践过程的兜底后面无论怎么折腾 SSH 配置还是装软件出了问题都能一键回到这个干净的初始状态。3. SSH 远程登录完整配置链路3.1 确认和启动 sshd 服务RHEL9 默认预装了 OpenSSH Server所以正常情况下不需要额外安装。登录虚拟机后先执行 systemctl status sshd 查看服务状态如果显示 active running直接后面往下走。如果服务不存在需要先安装缺失的软件包dnf install -y openssh-server systemctl enable --now sshd设置开机自启非常关键不然虚拟机重启后 SSH 服务不会自动起来你就只能去 VMware 控制台手动操作。执行 systemctl enable sshd 之后重启不影响服务。RHEL9 的 sshd 配置文件有一个特点主配置 /etc/ssh/sshd_config 里默认带了一行 Include /etc/ssh/sshd_config.d/*.conf。这意味着后加载的配置文件会覆盖主配置里的同名参数。这是个很好的设计我建议你所有自定义设置都放到 /etc/ssh/sshd_config.d/ 下新建一个文件比如 99-custom.conf而不是直接改主配置文件。这样后续升级或者排错时一眼就能看出你改过哪些参数也避免和默认配置混在一起。3.2 防火墙与 SELinux 放行规则RHEL9 默认开启 firewalld并且默认不会放行 SSH 端口所以就算 sshd 正常运行外部依然连接不上。这是 RHEL 系最容易踩的坑。检查防火墙状态和执行放行命令systemctl status firewalld firewall-cmd --permanent --add-servicessh firewall-cmd --reload firewall-cmd --list-services这里我用的是 add-servicessh它会自动映射到 TCP 22 端口。如果你后续修改了 SSH 端口这里就不能用 add-service要改成 firebully-cmd --permanent --add-port2222/tcp 这种具体端口写法。SELinux 默认是 enforcing 状态对 RHEL9 的 OpenSSH 服务本身有现成的安全策略22 端口不会有问题。但如果把 SSH 端口从 22 改成其他端口除了防火墙还必须告诉 SELinux 这个端口属于 ssh_port_t 类型不然连接会被 SELinux 拒绝。改端口的完整流程是dnf install -y policycoreutils-python-utils semanage port -a -t ssh_port_t -p tcp 2222 firewall-cmd --permanent --add-port2222/tcp firewall-cmd --reload然后修改配置文件里的 Port 为 2222重启 sshd。很多人改端口后只记得开防火墙忘了 semanage 这步结果连接仍然失败排查方向完全错误。3.3 第一次 SSH 登录和宿主机指纹确认在虚拟机上执行 ip addr show 获取 IP 地址RHEL9 在 VMware 里通常网卡名是 ens160。回到宿主机Windows 可以使用自带终端或者 PowerShell执行ssh devops192.168.xx.xx这里的 devops 是安装系统时创建的普通用户IP 换成你自己虚拟机的实际地址。第一次连接会提示确认主机指纹输入 yes 回车即可。这个指纹其实是服务器公钥的哈希用来确认你连接的是目标服务器防止中间人攻击。输入用户密码后进入系统SSH 远程登录基本流程就已经通了。这里我给新手一个提醒如果你的虚拟机 IP 每次重启都会变那么 SSH 的时候就要反复确认 IP。更合理的做法是直接跳过 DHCP给虚拟机配置固定 IP后面的章节会专门说这个。首次登录成功之后建议立刻做两件事一是修改一下 sshd 配置里的空密码登录限制二是配置密钥免密登录这两件事能明显提升后续操作体验和安全性。3.4 免密登录配置与权限检查免密登录用的核心机制是公钥认证。在宿主机上生成一对密钥公钥放到服务器上私钥留在本地。生成密钥推荐用 ed25519 算法性能和安全性都比传统的 RSA 好ssh-keygen -t ed25519 -C devopslocal生成之后把公钥内容复制到服务器的 ~/.ssh/authorized_keys 文件里。最方便的方式是用 ssh-copy-id 命令ssh-copy-id -i ~/.ssh/id_ed25519.pub devops192.168.xx.xx如果服务器不支持 ssh-copy-id可以手动执行cat ~/.ssh/id_ed25519.pub | ssh devops192.168.xx.xx mkdir -p ~/.ssh chmod 700 ~/.ssh cat ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys配置完成后再次 ssh 登录就不需要密码了。如果还是提示输入密码大概率是权限问题。服务器上的 ~/.ssh 目录权限必须是 700authorized_keys 文件必须是 600OpenSSH 的 StrictModes 默认会拒绝权限过于开放的文件。客户端这边私钥文件权限也不能太开放不然 ssh 会警告 Permissions are too open拒绝使用该密钥。常见的修权限命令是chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ~/.ssh/id_ed25519RHEL9 里还有一个很隐蔽的坑root 用户默认不能通过密码远程登录。OpenSSH 8.7 的默认配置里 PermitRootLogin 的值是 prohibit-password意思是 root 只能用密钥登录不能用密码登录。很多从 CentOS 7 转过来的老手会在 RHEL9 上遇到 root 密码登录失败还以为是密码不对。如果你确实需要允许 root 密码登录需要在 sshd_config.d/99-custom.conf 里显式写 PermitRootLogin yes然后重启 sshd。不过我的实际建议是尽量别这么做用一个普通 sudo 用户登录再通过 sudo 切换到 root审计日志更清晰安全性也更好。3.5 用 SSH config 管理多台服务器当你手里有多个 RHEL9 虚拟机环境时每次敲完整 ssh 命令很烦IP 和用户名容易记混。在宿主机上配置 ~/.ssh/config 文件可以解决这个问题这是被很多人忽略但非常好用的功能。文件格式如下Host rhel9-lab HostName 192.168.xx.xx User devops Port 22 IdentityFile ~/.ssh/id_ed25519配置保存后直接执行 ssh rhel9-lab 就会自动对应到那台服务器。如果有多台机器再加几个 Host 块就行。还可以设置通用的参数比如 ServerAliveInterval 60让客户端每 60 秒发一次心跳防止长时间没有操作时连接被路由器或者防火墙掐断。4. 固定 IP、主机名与 VMware 网络模式细节4.1 用 nmcli 摆脱 DHCP 随机地址RHEL9 默认使用 NetworkManager 管理网络DHCP 分配的地址在虚拟机重启后有可能会变化这对于 SSH 远程登录来说非常不方便因为每次你都要先到 VMware 控制台去看 IP。解决办法是给虚拟机配置静态 IP。先用 nmcli connection show 查看当前连接名称通常是 ens160。然后执行以下命令来设置静态地址nmcli connection modify ens160 ipv4.addresses 192.168.xx.xx/24 nmcli connection modify ens160 ipv4.gateway 192.168.xx.1 nmcli connection modify ens160 ipv4.dns 192.168.xx.1 nmcli connection modify ens160 ipv4.method manual nmcli connection up ens160注意地址、网关、DNS 必须和你的 VMware NAT 网段匹配。默认情况下VMware NAT 网段的网关地址是 192.168.x.2具体网段可以在 VMware 的“编辑虚拟机网络”里查看。这么做的一个明显体验提升是IP 固定之后SSH 别名可以放心写入 SSH config不用每台机器每次改 IP。为什么不建议直接改控制台脚本文件 ifcfg-ens160因为 RHEL9 已经逐步废弃了传统的 network-scripts 方式NetworkManager 会接管网络配置。直接编辑 ifcfg 文件很可能被你下次的 nmcli 操作覆盖产生配置冲突。除非你确认自己要完全停用 NetworkManager否则统一用 nmcli 是最优解。4.2 主机名与 /etc/hosts 的联动主机名在 SSH 远程管理时很影响效率。多台虚拟机如果都叫 localhost登录后很难辨认当前在哪个环境。RHEL9 修改主机名的命令是hostnamectl set-hostname rhel9-node01执行后重新登录终端或者开启新会话提示符就会变成 [devopsrhel9-node01 ~]。建议同时在 /etc/hosts 文件里加上一行本机映射把主机名指向回环地址127.0.0.1 rhel9-node01这样做的好处是许多服务在解析本机主机名时不会去外部 DNS 查一遍速度更快也不会因为 DNS 解析不到而持续超时。如果你还有计划在虚拟机里跑 DNS 或者内网服务主机名和 /etc/hosts 的联动更是刚需。4.3 NAT 和桥接哪种更适合远程登录场景这个话题我前文提过这里再展开说透。我的建议是个人学习和单机测试用 NAT 足够如果是团队协作或者需要让虚拟机被其他机器直连用桥接。NAT 模式下宿主机可以访问虚拟机但局域网内其他设备访问不到虚拟机。如果需要从公司内网另一台电脑 SSH 进这台虚拟机NAT 是实现不了的除非你在 VMware 里配置端口转发或者干脆改成桥接模式。桥接模式让虚拟机直接使用物理网络的 IP比如 192.168.1.x只要网络通任何设备都能直接 SSH。但桥接有一个需要注意的地方是 IP 需要跟物理网络规划匹配DHCP 分配得到地址后如果后续有变化仍然需要固定 IP。切换 VMware 网络模式时不要乱点“恢复默认设置”那个操作会把自定义网段全部清掉。正确方式是虚拟机电源关闭状态下编辑虚拟机设置网络适配器里从 NAT 改为桥接然后开机重新配置 IP。改桥接后RHEL9 里的网络地址可能不变也可能变取决于你之前配的是哪个网段。5. 常见问题排查速查与实战坑位记录5.1 六种 SSH 登录失败场景排查表我把实际操作中遇到的典型问题整理成了一张对照表按症状、原因、排查命令三列列出来。遇到类似问题时不需要重新摸索直接按表格顺序过一遍症状可能原因排查命令ssh: connect to host port 22: Connection refusedsshd 未运行或端口配置错误systemctl status sshdss -tlnp 看 22 端口监听连接超时 Connection timed out网络不通网卡没开VMware 网络模式选错ip addr 检查虚拟机内 IPping 宿主机 IPPermission denied (publickey,password)密码错误root 默认禁止密码登录密钥不匹配journalctl -u sshd 看服务端日志确认用户WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED宿主机 known_hosts 里旧指纹冲突系统重装或 IP 复用ssh-keygen -R 192.168.xx.xxBad permissions on private key私钥文件权限过宽SSH 拒绝使用chmod 600 ~/.ssh/id_ed25519连接建立后很快掉线防火墙或网络设备空闲超时客户端 SSH config 加 ServerAliveInterval 60以上每条我都实测过。尤其是宿主机的 known_hosts 冲突当你把虚拟机删除重建之后如果还复用同一个 IP宿主机就会提示指纹变化直接连不上。很多人会直接删掉整个 known_hosts 文件其实没必要用 ssh-keygen -R 指定 IP 清理那一条记录即可其他服务器指纹不受影响。5.2 让 SSH 会话更稳定的三个小配置长命令执行到一半连接断开是所有 SSH 用户的痛点。我总结三个很有效的稳定手段。第一在客户端 SSH config 里加 ServerAliveInterval 60 和 ServerAliveCountMax 3意思是客户端每 60 秒发一个保持心跳连续 3 次没响应才判定断开。这能解决大部分空闲超时问题。第二在服务端 /etc/ssh/sshd_config.d/99-custom.conf 里加 ClientAliveInterval 300服务端每 5 分钟检查一次也可以配合 ClientAliveCountMax 0 让它不主动断开空闲会话。第三遇到跑长时间任务的场景比如编译、备份我强烈建议套一层 tmuxdnf install -y tmux tmux new -s deploy这样即使 SSH 网络断开任务也在 tmux 会话里继续运行重连后执行 tmux attach -t deploy 就能回到现场这比 nohup 加后台重定向更直观也可以随时切多个窗口。5.3 批量给多台 RHEL9 做免密登录如果手头有多台虚拟机要批量初始化逐台 ssh-copy-id 太累写一个小循环就能搞。前提是这些机器的账号密码相同或者你已经有了第一台的密钥for ip in 192.168.20.131 192.168.20.132 192.168.20.133; do sshpass -p yourpassword ssh-copy-id -i ~/.ssh/id_ed25519.pub user$ip done需要说明的是 sshpass 这个工具要额外安装而且把密码直接写在命令历史里并不安全只适合临时测试环境的批量初始化。更规范的做法是用 Ansible 的 authorized_key 模块一次性下发公钥或者先把密码认证改成密钥认证后再用循环批量推送配置。生产环境我不建议用明文密码循环这个分寸要把握好。5.4 我个人实测中踩过最深的坑最后聊几个值得单独拿出来说的坑。第一个坑是修改 sshd_config 后 sshd 启动失败。我有一次改完直接执行 systemctl restart sshd结果 sshd 起不来了而当前 SSH 连接还没断开所以还能补救。但如果当前已经断开就只能去 VMware 控制台操作。安全做法是修改配置后先在新窗口测试 ssh 加自定义端口能否连上确认没问题再断开旧连接。提供服务端修改前后最好先备份一份文件cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak。第二个坑是 RHEL9 默认的 PermitRootLogin prohibit-password。我给一台刚从 CentOS 7 迁移过来的服务器开远程管理root 用户一直提示密码错误折腾了半天才发现不是密码的问题是 OpenSSH 默认策略变了。这个默认行为很容易让人误以为是系统故障。第三个坑是 VMware 的 NAT 网段和虚拟机的静态 IP 不在同一子网。因为我之前在其他机器上配过一次网段新建虚拟机时没有检查 VMware Network Editor 里的 VMnet8 网段结果虚拟机配置了 192.168.20.x而 VMware NAT 实际用 192.168.88.xSSH 怎么都连不上。所以每次新建环境先确认虚拟网络的网段再配 IP能省很多时间。6. 让 SSH 链路继续发挥作用的几个进阶习惯到此RHEL9 虚拟机部署和 SSH 远程登录的主流程已经通了。我再补充两个实操中很受用的进阶点一是远程开发的直接体验二是文件传输的几个常用命令。6.1 VSCode Remote-SSH 连接 RHEL9如果你主要用 Windows 或者 Mac 做日常开发但又想在 RHEL9 环境里写代码和调试VSCode 的 Remote-SSH 插件就是最好的入口。安装好插件后按 CtrlShiftP 打开命令面板选择 Remote-SSH: Connect to Host填入之前在 SSH config 里配置的主机别名即可。它会自动在服务器上安装一个远程服务器进程然后把窗口切换成远程模式。整个过程不需要密码重复输入因为我们已经配置了免密登录体验非常顺滑。这个连接方式对 RHEL9 运维也很实用你可以直接远程编辑 /etc/ssh/sshd_config.d/99-custom.conf 或者 systemd 服务文件修改保存后回到终端执行 systemctl reload比在纯文本终端里用 vim 舒服很多尤其是对不熟悉 vim 快捷键的新手。6.2 文件传输与远程执行命令的常用组合SSH 链路通顺之后文件传输基本不需要再找第三方工具了。scp 和 sftp 是标配用法也很简单scp ./test.sh devopsrhel9-lab:/tmp/ ssh devopsrhel9-lab sudo systemctl restart httpd第一条命令把本地文件推送到服务器 /tmp 目录第二条命令远程执行一条服务重启命令。如果文件比较大scp 可能不够快可以用 rsyncRHEL9 默认仓库可以直接安装rsync 支持断点续传和增量同步日常备份和同步都稳定很多。6.3 从 SSH 看整套 Linux 管理思维一台 RHEL9 虚拟机能不能顺利通过 SSH 远程登录表面上只是服务端口和防火墙的问题实际背后串起了系统初始化、网络配置、安全策略、服务管理等多个层面。我个人的体会是SSH 是所有 Linux 服务器管理的起点这一步如果配得足够顺后续所有的环境搭建、应用部署、监控排障都会很顺手。反过来如果一开始网卡没开、防火墙没放行、权限配置又混乱那后续每登一次都会浪费几分钟。这套实践流程里我最满意的其实是最后形成的那套 SSH config 文件加上牢牢记住的固定 IP 分配策略。这让多台 RHEL9 虚拟机之间的来回切换变得和切换本地窗口一样自然。如果你按这篇步骤操作中途遇到问题可以先按排查表逐项过滤一遍剩下的就是耐心了。RHEL9 本身的设计已经比旧版本合理很多只要不跳过防火墙和 SELinux 这两步它不会给你添乱。
返回列表