RHEL9虚拟机搭建与SSH远程连接,Linux学习者绕不开的第一道门槛。折腾过几台RHEL系机器之后,不管是自己在做环境测试,还是想搭个能远程操作的运维节点,这套流程迟早要踩一遍。市面上讲RHEL安装的教程不少,但很多都停在“装完就行”,真正到了要远程连上去干活的时候,才发现网卡没配好、防火墙拦截、SELinux捣乱,一个接一个的坑。
这篇就把我实际搭建RHEL9虚拟机、做完SSH远程连接的完整过程记录下来,有细节、有命令、有排错思路,尽量让零基础的朋友也能照着一步步操作下来。项目本身并不复杂,但麻雀虽小五脏俱全,涉及虚拟化平台选型、系统安装配置、网络模式理解、SSH服务调优等多个知识点,可以说是Linux网络管理的“入门套餐”。我把踩过的坑和关键参数选择背后的逻辑一并写清楚,看的时候不光是跟着敲命令,更能明白为什么要这么配。
1. 整体方案设计与思路拆解
1.1 为什么选RHEL9而不是其他Linux发行版
很多人第一次接触Linux都是Ubuntu或者CentOS,选RHEL9作为练习对象,还是有一些具体原因的。
RHEL(Red Hat Enterprise Linux)是企业级Linux发行版中使用率极高的一个分支,很多生产环境的服务器、数据库、中间件都跑在RHEL或者其兼容衍生版上。学Linux如果目标是往运维、云原生、企业级应用部署方向走,RHEL系的命令体系、目录结构、服务管理方式更贴近实际工作环境。RHEL9是2022年发布的主版本,比老旧的CentOS 7/RHEL8更新,里面带了新的内核版本、新的系统初始化流程,还有很多新特性的默认配置变化,用起来不至于一上来就摸到淘汰边缘的技术栈。
再加上RHEL9采用了dnf作为包管理器,替代了老式的yum,这套机制和现在主流的Fedora、AlmaLinux、Rocky Linux都是通的。学会RHEL9的基本操作,未来切换到其他同系发行版几乎是无缝衔接。
1.2 虚拟化平台怎么选:VMware、VirtualBox还是KVM
搭建虚拟机,第一步要选虚拟机管理工具。现在主流的几个选择包括VMware Workstation、Oracle VirtualBox,还有Linux环境下原生的KVM/QEMU方案。
如果是Windows系统上做实验,VMware Workstation Player(免费版)或者VirtualBox是首选。两者对新手都很友好,VirtualBox完全开源免费,VMware Workstation Player个人使用也免费,安装包都不大,界面直观,支持快照、克隆、网络自定义这些常用的功能。我个人的偏好是VMware Workstation,原因是它的网络适配器种类齐全,在NAT模式下的网络配置更稳定,虚拟机的网络问题排查起来步骤更少。VirtualBox偶尔会出现一些USB、显示方面的兼容问题,但不影响基本使用。
如果是Linux物理机上做实验,可以优先考虑KVM/QEMU方案,性能好,管理工具用virt-manager。KVM是内核级虚拟化,性能接近裸机,适合后续要做更复杂实验的场景。
本文的实操过程以VMware Workstation为例展开,步骤和原理在VirtualBox/KVM上同样适用,只是界面和个别按钮位置略有不同。
1.3 网络模式的选择:NAT模式为什么是练习首选
虚拟机网络连接方式有桥接模式、NAT模式、仅主机模式三种,分别对应不同的应用场景。搭建练习环境做SSH远程连接,我最推荐的是NAT模式。
NAT模式下,虚拟机通过宿主机共享IP地址访问外部网络,虚拟机和宿主机之间有一个独立的虚拟局域网,宿主机可以访问虚拟机,虚拟机也能访问外部网络(比如在线下载软件包、更新系统)。
桥接模式会直接让虚拟机出现在物理局域网中,获得一个和宿主机同网段的IP,看似更“真实”,但因为不同路由器、交换机有自身的网络策略,容易出现IP不够分配、DHCP异常、网络隔离导致虚拟机连不上网的情况。
仅主机模式则只能和宿主机通信,无法访问外部网络,适合做纯内部的实验,但这和我们需要在线安装软件包、使用dnf的需求不匹配。
NAT模式对新手来说最稳,既能上网,又不需要关心物理网络的复杂结构,虚拟机从NAT虚拟交换机上拿到的IP地址是独立的,不用担心局域网里的IP冲突。SSH连接时,虚拟机IP直接可达宿主机,练习体验最顺畅。
2. 核心细节解析与实操要点
2.1 RHEL9镜像下载与校验
搭建虚拟机之前,先把RHEL9的镜像下载好。这里有一点需要注意:RHEL官方ISO镜像需要Red Hat账号才能下载,没有订阅的账号也能下载安装,只是安装后的系统无法正常使用dnf软件源,需要额外处理订阅或自行配置软件源。
实际练习中,可以到Red Hat官网注册免费开发者账号,获得开发者订阅,这样既能合法使用RHEL镜像,也能正常更新软件包。如果不想注册,用社区版兼容发行版(如AlmaLinux、Rocky Linux)镜像效果几乎一样,命令和操作流程与RHEL完全一致。本人练习用的就是官方开发者订阅通道下载的镜像,安装之后可以用dnf正常装软件。
下载ISO时要注意选择ISO格式的DVD镜像,而不是Boot ISO。DVD ISO包含完整的软件包集合,安装界面可以选择安装哪些软件组,离线安装一些基础工具也方便。Boot ISO体积虽小,但安装过程需要联网下载软件包,网络出问题时容易卡住。
下载完成后建议校验一下镜像的SHA256校验和,网上的镜像站偶尔会有损坏文件。官方页面会提供对应的校验值,Linux下用sha256sum命令校验,Windows下可以用PowerShell的Get-FileHash命令校验。这一步用不了两分钟,但能省掉安装过程中突然出错的懊恼时间。
2.2 虚拟机硬件配置怎么定
新建虚拟机时,几个关键硬件参数决定了系统运行的流畅度和后续扩展性。以RHEL9为例,官方最低配置是1.5GHz双核CPU、4GB内存、30GB磁盘空间。但这个只是能用,要跑起图形界面、装一些开发工具,还是建议富余一点。
我实际操作时给的配置是:
- 内存:4096MB(4GB)
- 处理器:2核,核数不够后续编译软件时CPU顶满
- 硬盘:40GB(使用虚拟磁盘,动态扩容模式)
- 网络适配器:NAT模式
- 声卡、打印机等不用的设备直接移除
内存给4GB是个比较平衡的点:虚拟机内部跑RHEL9最小化安装绰绰有余,开图形界面也流畅;同时宿主机其他程序还能正常用。如果是4GB内存的电脑跑虚拟机,建议虚拟机内存给2GB,安装时选择最小化安装,完全不装图形环境,命令行的RHEL9只需要约1GB内存。
硬盘大小方面,40GB看着大,实际用起来你会发现RHEL9基础安装就要占4GB左右,装上软件组和未来的工作文件,空间消耗很快。虚拟磁盘选择“动态分配”,刚创建时只占很小真实磁盘空间,后续用多少占多少,不会白白消耗宿主机磁盘。
2.3 安装过程中容易忽视的配置项
RHEL9的安装过程整体比较流畅,图形化界面引导很清晰。有几个配置项,新手经常忽略或者选错,这里单摘出来讲。
第一是“软件选择”这一步,安装源选“本地介质”,软件选择里可以根据用途选“带图形界面的服务器”或者“最小化安装”。做SSH远程连接练习,选“最小化安装”就够了,不装图形环境,系统更轻、启动更快、占用更少。但我个人建议初学者可以选“带图形界面的服务器”,万一后面想做文件管理、桌面操作,图形界面会直观很多,练习时多看一个界面也没坏处。
第二是“安装目的地”这一步,进去后可以看到磁盘分区选项。对新手来说,选“自动配置分区”就足够。RHEL9默认会用LVM(逻辑卷管理)自动创建/boot、/root、/swap等分区,这样的布局可扩展性好,后续空间不足可以动态调整。不用手动分区,那种做法适合有明确分区规划的场景,练习阶段碰都不用碰。
第三是“Root密码设置”,RHEL9安装过程中允许设置root密码。很多教程会建议创建普通用户,用普通用户登录再通过sudo提权,这种方式更安全。但练习环境里为了方便,也可以直接用root用户。我建议的做法是:同时创建普通用户和设置root密码,平时用普通用户登录练习,需要时再切换root或者用sudo,更贴近真实工作习惯。
第四是安装完成后,安装程序会提示“您需要重新启动系统才能完成安装”,这里点击重启就行,重启后第一次进入系统时记得勾选许可协议,把系统配置完成。有些人不注意,重启后直接进系统才发现软件包没装完或配置没生效,又得回头重装一遍。
3. 实操过程与核心环节实现
3.1 从新建虚拟机到系统安装完成
下面按步骤拆解实际操作路径,每一步都说明操作原理。
新建虚拟机时,VMware Workstation的向导会问“安装来源”,这里先选择“稍后安装操作系统”,ISO光驱后面再挂载。这样做的目的是先把虚拟机的硬件参数固定下来,避免向导在安装过程中自动预选配置而后续又得改。
虚拟机硬件设置完成后,右键虚拟机名称,选择“设置”,在“CD/DVD”一栏,勾选“使用ISO映像文件”,选择下载的RHEL9镜像,然后开启虚拟机。开机后会出现安装引导菜单,默认选择第一项“Install Red Hat Enterprise Linux 9.0”,回车进入安装程序。
整个安装流程会经过以下配置项,每一处结合前面说的思路来配:
- 语言选择:选“中文”或“English”均可。对练习环境来说,中文界面更直观,但后续看英文报错、英文文档会有点脱节。我一般选英文,强迫自己适应英文操作环境,这是长期看文档、写脚本的基础。
- 软件选择:选“带图形界面的服务器”或“最小化安装”,二者选一。
- 安装目的地:自动配置分区。
- Root密码与用户创建:设置root密码,创建普通用户并勾选“将此用户设为管理员”(即加入wheel组,获得sudo权限)。
- 网络与主机名:这里可以当前默认配置,安装完系统后再做精细配置。RHEL9安装界面中,网络默认是“关闭”状态,需要在界面里开启,也可以装完后用nmcli命令开启。
所有配置确认后,点击“开始安装”,等进度条走完即可。安装完成后重启,输入用户名密码登录系统,虚拟机搭建部分就完成了。
拿到一个命令行终端的界面后,先做的第一个确认动作:
cat /etc/redhat-release如果输出类似“Red Hat Enterprise Linux release 9.4 ...”,说明系统就绪。接下来所有操作都在这个终端里进行。
3.2 网卡配置与IP地址获取:nmcli命令实战
RHEL9默认使用NetworkManager管理网络,网卡配置文件从原来的/etc/sysconfig/network-scripts/ifcfg-*路径改成了类似键值对存储,但配置文件已经不再是主要管理方式,命令行工具nmcli才是推荐的网络管理入口。
新装好系统后,网卡默认可能是未启用的状态。先看当前网络情况:
nmcli device status这个命令会列出所有网络设备的连接状态。如果看到网卡(类似ens160或ens192这样的名字)状态为“disconnected”或“unmanaged”,需要手动把它连上:
nmcli device connect ens160或者针对NetworkManager连接配置来操作:
nmcli connection show nmcli connection up ens160这里的“连接”在NetworkManager概念里指一个预置的配置集,每张网卡默认对应一个连接配置,名字和网卡名相同。把连接激活之后,虚拟机就能通过DHCP自动获取IP。确认IP地址:
ip addr show ens160或者简洁一点:
ip a如果看到inet字段后有192.168.x.x、172.17.x.x等地址,就说明从NAT的DHCP中拿到了IP。这里要记住一个关键点:虚拟机的IP地址可能会因为DHCP租约变化而改变,如果做实验时发现之前能连的IP突然连不上,大概率是IP变了,重新查一下就好。
为了练习时IP稳定不变,可以给这个连接配置一个静态IP。策略上,RHEL9虚拟机在NAT网络中,通常所在网段是192.168.xxx.0/24,网关是192.168.xxx.2(VMware的NAT网关地址一般是x.x.x.2),DNS可以配置成宿主机网关或者公共DNS。
设置静态IP的命令:
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.xxx.100/24 ipv4.gateway 192.168.xxx.2 ipv4.dns 192.168.xxx.2 nmcli connection up ens160注意把上面的xxx替换成你NAT网络实际网段。怎么看实际网段?在宿主机上运行ipconfig(Windows)或者ip addr(Linux/macOS),看VMnet8网卡的IP,比如VMnet8的IP是192.168.137.1,那么虚拟机静态IP就配192.168.137.100之类的地址。
给虚拟机设置静态IP,是后续各种服务配置的基础。因为如果每次开机IP都变,无论是SSH连接还是做集群、装服务,都要重新找IP,非常影响效率。
3.3 SSH服务配置:从检查到启动
RHEL9的最小化安装默认自带OpenSSH服务端软件包,但服务不一定已经启动。先确认状态:
systemctl status sshd如果输出里显示“Active: active (running)”,说明SSH服务已经在跑。如果没启动:
systemctl start sshd systemctl enable sshdsystemctl enable sshd这一步是为了把服务设置成开机自启,不然每次重启虚拟机都得手动启动一次服务。练习过程中养成写完服务配置就顺手enable的习惯,后面会少很多麻烦。
服务启动后还需要确认22端口在监听:
ss -tlnp | grep 22看到类似LISTEN 0 128 0.0.0.0:22这样的行,说明SSH服务正在监听所有接口的22端口。这里出现0.0.0.0表示监听所有网络接口,是正常现象。
同时检查防火墙状态,RHEL9默认启用了firewalld,不把SSH端口放行的话,即便服务在跑也一样连不上。查看防火墙规则:
systemctl status firewalld firewall-cmd --list-all如果firewalld是运行状态,需要放行SSH服务:
firewall-cmd --add-service=ssh --permanent firewall-cmd --reload--permanent参数表示永久生效,不加只会对当前运行配置有效,重启后规则就丢了,这个细节很容易被忽略。
3.4 宿主机远程连接:SSH命令实操
虚拟机端配置完成后,在宿主机上打开终端(Windows可以用PowerShell、CMD,或者Windows自带的Windows Terminal;Linux/macOS直接开终端),尝试连接:
ssh 用户名@虚拟机IP比如用户名是devops,虚拟机IP是192.168.137.100,命令就是:
ssh devops@192.168.137.100第一次连接会出现确认主机真实性的提示:
The authenticity of host '192.168.137.100 (192.168.137.100)' can't be established. Are you sure you want to continue connecting (yes/no)?这里输入yes回车,这是SSH的机制,用来确认对方主机的身份,避免信任了错误的主机。之后提示输入密码,输入用户密码后回车,就进入了虚拟机的命令行界面。
这里建议用普通用户连接,不要直接用root。RHEL9默认禁用了root用户的SSH登录,这是安全策略,在生产环境中一般也不建议直接暴露root远程登录权限。练习时用普通用户登录后,需要执行管理命令时再切换:
sudo -i输入当前用户密码后就切换到root。
远程连接成功后,后续的所有操作都可以在宿主机终端里完成,不需要再打开虚拟机的图形界面了。这才是SSH真正的作用:无头管理一台远程机器。
4. 远程连接常见问题与排查技巧实录
4.1 连不上虚拟机:从网络基础开始查
SSH连接失败是最常见的故障,但排查路径其实比较固定。我按经验列出可能出现问题的层次,从底层往上层排查。
第一步,先在宿主机上ping虚拟机IP,确认网络通不通:
ping 192.168.137.100ping不同的话,先看虚拟机的网络配置。确认网卡是否起来了,IP是否正确,是否和宿主机VMnet8在同一网段。用ip a命令查看,如果看到网卡状态DOWN,用nmcli connection up ens160恢复。如果IP不在同一网段,就需要重新检查NAT模式的网络设置。
第二步,ping能通但SSH还是连不上,就要确认SSH服务本身。在虚拟机的终端里执行:
systemctl status sshd ss -tlnp | grep 22如果sshd没有运行,启动它并设置开机自启。如果sshd在运行但22端口没监听,大概率是sshd配置文件里修改过监听地址,检查/etc/ssh/sshd_config中的Port和ListenAddress配置。
第三步,服务正常但连接还是被拒,检查防火墙。查看防火墙是否拦截了22端口:
firewall-cmd --list-all | grep ssh没有输出就说明22端口没有被放行,按前面说的命令添加SSH服务即可。这里提醒一下,firewalld规则分“运行临时”和“永久”两类,只加了临时规则不reload,或者只reload但没加永久,都会出现莫名其妙的“重启后又连不上”问题。
第四步,还有一种Windows宿主机特有的坑,就是Windows防火墙拦截了出站SSH连接,或者VMware的虚拟网卡被宿主机防火墙拦了。遇到这种情况,检查Windows防火墙设置中VMware Network相关的规则,必要时临时关闭Windows防火墙测试一下,确认是防火墙问题后再细化规则。
4.2 连接超时 vs 拒绝连接:两种报错两种含义
SSH连接失败时,报错信息一般分两类:“connection timed out”和“connection refused”,两者代表完全不同的问题层面。
Connection timed out,说明数据包发出去之后没有得到任何回应,通常是网络层面的问题。虚拟机的IP不可达、网卡没起来、虚拟机和宿主机不在同一网段,最常见的就是这三种情况。此时重点查网络配置,而不是SSH服务。
Connection refused,说明数据包到达了目标机器,但目标机器的对应端口没有服务在监听,或者防火墙主动丢弃了连接请求。这种情况重点查sshd服务状态和防火墙规则,前者对应服务没起来,后者对应端口被挡。连接包到了机器上,机器直接回了个拒绝信号。
把这两个报错的区别记住,排查故障时就能节省大量时间。报错信息本身就在告诉你是网络没通还是服务没有,按照对应方向去查,基本不会跑偏。
4.3 密码正确但登录失败?注意root用户限制
用root用户SSH登录时,明明密码正确,却一直提示登录失败,这是RHEL系列默认安全策略导致的结果。
/etc/ssh/sshd_config文件中有一个参数:
PermitRootLogin prohibit-password或者
PermitRootLogin noprohibit-password表示root只能通过密钥登录,禁止密码登录;no表示完全禁止root登录。RHEL9的默认配置一般是prohibit-password,这会导致root密码怎么输都是错的。
一种解决方式是改用普通用户登录,登录后再执行sudo -i切换root。这是推荐的做法,符合安全习惯。
另一种解决方式是修改sshd_config文件,设置root允许密码登录。改配置时需要用到sed命令或者vim编辑器,修改完后重启sshd服务:
sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config systemctl restart sshd注意即使改了配置,还需要检查SELinux策略。RHEL9默认开启SELinux的 enforcing 模式,SSH相关的安全策略默认是允许标准操作的,但如果你改了非标准的监听端口,忘了同步调整SELinux策略类型,就会遇到服务看着在运行但外部连接就是进不来的怪现象。SELinux的排查相对复杂,练习阶段还是尽量用标准配置,少折腾非标准端口。
4.4 隔一段时间就掉线:会话保持配置
SSH连接后,如果一段时间没操作,终端就会卡住,输入命令没反应,过一会儿断开,这也是高频问题。原因是SSH会话默认较长时间没有数据传输,中间网络设备或系统会断开空闲连接。
解决方案是给SSH客户端和服务端都配置上心跳包机制。服务端在/etc/ssh/sshd_config中加:
ClientAliveInterval 60 ClientAliveCountMax 3这两行的意思是服务端每60秒向客户端发送一次心跳包,连续3次没收到响应才断开连接,相当于允许空闲3分钟。配置后重启sshd服务生效。
客户端也可以做类似配置,在~/.ssh/config文件中添加:
Host * ServerAliveInterval 60 ServerAliveCountMax 3这样即使服务端没配置,客户端自己也会发心跳,维护连接不断。
4.5 从密码登录升级到密钥登录
SSH远程连接练习入门后,非常建议做一步升级:把密码登录改成密钥登录。密钥登录不仅更安全,日常操作更方便,不再需要每次输密码。
在宿主机上生成密钥对:
ssh-keygen -t ed25519一路回车即可,默认生成到~/.ssh/目录下,公钥文件是id_ed25519.pub。ED25519是目前安全性和性能均衡较好的密钥类型,RHEL9的OpenSSH版本完整支持。
然后把公钥复制到虚拟机:
ssh-copy-id 用户名@虚拟机IP执行后输入用户密码,公钥就会被追加到虚拟机对应用户的~/.ssh/authorized_keys文件中。如果宿主机没有ssh-copy-id命令(比如某些Windows环境),手动追加也行:
cat ~/.ssh/id_ed25519.pub | ssh 用户名@虚拟机IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"这条命令的本质是在远程创建.ssh目录、设置正确权限、写入公钥。这里chmod权限比较关键,SSH对authorized_keys文件的权限要求很严格,权限太宽松了会直接拒绝使用该密钥。
验证密钥登录:
ssh 用户名@虚拟机IP如果不再提示输入密码、直接进入系统,说明密钥登录成功。之后还可以在/etc/ssh/sshd_config中设置:
PasswordAuthentication no禁止密码登录,进一步增强系统安全。但做这一步之前务必确认密钥登录可用,否则可能把自己锁在外面。
4.6 虚拟机克隆后的网络问题
做练习时很容易遇到一个场景:配好第一台虚拟机后想克隆几台做多机实验。克隆出来的虚拟机网卡配置还是原机器残留的,NetworkManager会生成新的连接配置,MAC地址和旧IP对应关系全部乱套,导致新机器无法正常使用网络。
正确做法是克隆完成后,在虚拟机里清理旧的网络连接配置,重新生成网卡连接。RHEL9中可以直接删除旧连接并重新激活:
nmcli connection delete ens160 nmcli device connect ens160或者把/etc/NetworkManager/system-connections/目录下对应的配置文件删掉,重启NetworkManager:
systemctl restart NetworkManager清理完旧MAC绑定信息后,重新用DHCP获取IP即可。这个坑在使用模板克隆虚拟机场景下时有发生,提前了解能省下不少排查时间。
5. 扩展思路与个人经验总结
虚拟机搭建和SSH连接本身只是一个起点,但它牵扯到一套操作系统管理的基本功。系统安装时接触了分区、用户、软件包的概念,网络部分涉及了IP、网关、DNS、防火墙,SSH连接则关系到网络安全、服务管理、远程操作这些工作中每天都在用的能力。
我个人在做后续练习时,往往会在同一台虚拟机上进行几个方向的延伸实验,让这套基础功更扎实:
一是配置一个简单的Web服务,用dnf安装nginx或httpd,然后通过宿主机的浏览器访问虚拟机IP。这一步能把网络连通性的理解从“能ping通、能SSH”提升到“端口和服务的关系”层面,也能顺便练习Linux服务管理的常用操作。
二是设置快照习惯。VMware里做快照非常方便。安装完系统、配置好网络后拍一个快照,后续做任何危险操作前疯狂“作死”都不怕,坏了恢复快照就是一条命令的事。养成这个习惯后,很多实验都敢大胆尝试了。
三是用命令行习惯替代图形界面。RHEL9的终端操作非常重要,不管是改配置、查日志、操作文件,都尽量用命令行完成。练习阶段多敲命令,是建立手感最好的方式。
四是有条件的话配置SFTP进行文件传输。SSH服务天然支持SFTP,在宿主机上用WinSCP、FileZilla等工具连接虚拟机传输文件。这对后续做项目部署、数据交换是非常重要的操作方式。
回看整个练习过程,最难的部分其实不是敲命令本身,而是遇到问题时的思路和耐心。SSH连接不上时,最容易犯的错就是想都不想就去改配置文件,改来改去反而越来越乱。我的体感是,遇到问题沿着“网络通不通、服务在不在、端口放没放、配置对不对”这条链路排查,基本都能定位。排查完顺手把过程记录在笔记里,下次遇到同类问题,翻笔记回答案。
每个人接触Linux的方式不同,但虚拟机里折腾是最快的入门路径。RHEL9这套流程走通之后,后面无论是学Shell脚本、服务部署、网络管理还是容器化,都有了可操作的基础环境。慢慢来,每一台虚拟机都会成为你积累经验的砖石,等你回过头看,最初那个连SSH都连不上的阶段,早就是轻舟已过万重山了。