制作一个红帽Linux系统的虚拟机作为母盘,然后通过母盘克隆出n个虚拟机来做实验或项目
1.下载好红帽的镜像
建议下载rhel9.6版本
https://access.redhat.com/downloads
2.设置好网络环境
右击VMwara------属性------快捷方式------高级------勾选用管理员身份运行------依次点击确定

点击导航栏------编辑------虚拟网络编辑器,如果虚拟机的网络有问题,可点击左下角的还原默认设置

注意自己NAT的网关,之后的NAT网卡的主机都要配好自己的网关,否则虚拟机远程连接不了;点击VMnet8 NAT···------NAT设置------查看网关

按win键+R键出现运行窗口,输入cmd(按Ctrl键+Shift键+Enter键可 以管理员身份运行命令提示符)直接回车进入命令提示符,在命令提示符输入ipconfig查看网络,观察虚拟机的IP网段是否与win查看的虚拟机的IP网段一致
C:\Users\Forget>ipconfig

如果虚拟机的IP网段与win查看的不一致,可直接修改虚拟机的IP网段

如果不想修改虚拟机的IP网段,则可以修改Windows的VMwara的IP网段;按Win键+S键输入控制面板,点击控制面板------网络和Internet------网络和共享中心------更改适配器设置------又击VMnet1/VMnet8------属性------双击Internet协议版本4------修改IP网段



3.创建一个新的虚拟机
点击创建新的虚拟机,依次点击下一步




输入自己的虚拟机名称

处理器增加到4个,如果内存资源有限,将处理器减少到1-2个




磁盘类型建议选择SATA或NVMe


最大磁盘大小调到100G



然后点击编辑虚拟机设置,点击硬件------CD/DVD------连接,使用ISO映像文件,一定要选择好自己的镜像文件;点击硬件------显示,取消加速3D图形,指定监视器数量为1,最大分辨率为1024x768,勾选拉伸模式;点击选项------高级------固件类型,勾选BIOS,然后点击确定



选择虚拟机语言

点击Installation Destination------编辑安装位置,选择Custom然后点击左上角的Done;选择Standard Partition------Click··· ,然后删除/home分区,设置/boot------1G,/swap------4G,/------95G(Update Settings------更新设置);点击左上角的Done,然后点击Accept Changes








点击Softwara Selection,然后选择Server(服务器),再点击Done
#注意:如果需要图形化的虚拟机就默认选择Server with GUI(可做两台母盘,一台图形化,一台无图形化;图形化虚拟机一般只用来做测试,因为耗内存较大)


点击Root Password------输入密码,勾选Allow···,再点击Done


最后点击右下角的Begin Installation进行启动,进度条跑完后点击Reboot System

4.配置虚拟机环境
输入用户(root)和密码,然后给主机重命名RHEL9.6_db;然后点击导航栏上的虚拟机------可移动设备------CD/DVD------连接或者点击右下角倒数第二个圆圈图标------连接(都是连接镜像的)
root@RHEL9 \~# hostnamectl hostname RHEL9.6_db

创建要挂在镜像的目录/rhel9.6_cd,将/dev/sr0挂载到/rhel9.6_cd下,用cat来写本地仓库cd.repo;
root@RHEL9 \~# mkdir /rhel9.6_cd
root@RHEL9 \~# mount /dev/sr0 /rhel9.6_cd/
root@RHEL9 \~# cat > /etc/yum.repos.d/cd.repo << EOF
BaseOS
name = cd_BaseOS
baseurl = file:///rhel9.6_cd/BaseOS
gpgcheck = 0
AppStream
name = cd_AppStream
baseurl = file:///rhel9.6_cd/AppStream
gpgcheck = 0
EOF

可以用vim编辑~/.vimrc设置属性,也可以直接用cat写入;将"mount /dev/sr0 /rhel9.6_cd"这条命令写到/etc/rc.local下,然后给/etc/rc.local添加可执行权限,实现开启自动挂载镜像;用reboot重启虚拟机
root@RHEL9 \~# vim ~/.vimrc
1 set nu
2 set autoindent
3 set tabstop=4
root@RHEL9 \~# vim /etc/rc.local
1 #!/bin/bash
2 # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
3 #
4 # It is highly advisable to create own systemd services or udev rules
5 # to run scripts during boot instead of using this file.
6 #
7 # In contrast to previous versions due to parallel execution during boot
8 # this script will NOT be run after all other services.
9 #
10 # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
11 # that this script will be executed during boot.
12
13 touch /var/lock/subsys/local
14
15 mount /dev/sr0 /rhel9_cd
root@RHEL9 \~# chmod +x /etc/rc.local

查看挂载目录/rhel9.6_cd是否成功自动挂载镜像,然后再查看ip,用MobaXterm来远程连接虚拟机,方便敲代码

点击左上角的Session------SSH,然后输入IP地址、root用户

5.创建网络脚本
可通过":set nonu"这条命令来取消行号
root@RHEL9 \~# vim /bin/ip.sh
#!/bin/bash
"$#" -lt "3" && {
echo "error!!"
exit
}
CONNECTION=`nmcli connection show | awk "/1/"'{print 1}'|grep $1`
"$?" -ne "0" && {
echo "$1" is in used !!
nmcli connection delete $CONNECTION
}
"$4" = "noroute" && {
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
connection
id=$1
type=ethernet
interface-name=$1
ipv4
method=manual
address1=$2/24
EOF
}||{
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
connection
id=$1
type=ethernet
interface-name=$1
ipv4
method=manual
address1=$2/24,
gateway=${2%.*}.2
dns=8.8.8.8;
EOF
}
chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1
hostnamectl hostname $3
cat > /etc/hosts<< EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
2 3
EOF
ip a s $1
hostname
root@RHEL9 \~# chmod +x /bin/ip.sh #给ip.sh添加执行权限,之后可直接用ip.sh来改网络
我写的脚本的第一个参数是网卡,第二个参数是ip,第三个参数是主机名,第四个参数没有或者noroute
"$#" -lt "3" && {
echo "error!!"
exit
}
这段代码的意思是判断传参数的个数("$#")是否小于(-lt)3,如果小于3回复error并直接退出脚本,即不执行之后的命令
CONNECTION=`nmcli connection show | awk "/1/"'{print 1}'|grep $1`
将nmcli connection show的结果(网卡信息)传给awk;"/1/"------执行脚本传的第一个参数;awk "1"------匹配第一个参数的行;"{print 1}"------打印每行的第一列;grep 1------再次过滤第一个参数;将得到的最后结果传给CONNECTION(即网卡名称)
"$?" -ne "0" && {
echo "$1" is in used !!
nmcli connection delete $CONNECTION
}
"$?"------上一条命令得到的结果;-ne------不等于;则该命令的意思是如果CONNECTION这个参数的结果等于0(即没有该网卡)就不执行这条命令,继续执行下一条;如果CONNECTION这个参数的结果不等于0(即已经有该网卡)就继续执行这条命令,说明该网卡以使用,删除掉这个网卡
"$4" = "noroute" && {
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
connection
id=$1
type=ethernet
interface-name=$1
ipv4
method=manual
address1=$2/24
EOF
}
1------第一个参数即网卡;2------第二个参数即ip;4------第四个参数即有误noroute(有网关则不行第四个参数,没有网关则写noroute);cat \> ------覆盖(cat \>\> ------追加);/etc/NetworkManager/system-connections/1.nmconnection------某网卡的配置信息;<< EOF------代码结束语;id=1------连接时的网卡名称;type=ethernet------有线连接类型(lo网卡:loopback是回环接口类型);interface-name------物理网卡名称;method=manual------手动设置;address1=2/24------第一个ip为第二个参数(一个网卡可以有多个ip,即address2···);则这条命令的意思是如果第四个参数等于noroute就继续执行这条命令,将以下的代码直接覆盖原来的网卡配置文件中的代码
||{
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
connection
id=$1
type=ethernet
interface-name=$1
ipv4
method=manual
address1=$2/24,
gateway=${2%.*}.2
dns=8.8.8.8;
EOF
}
||------或的意思即上面没有第四个参数就执行这条命令;gateway=${2%.*}.2------截取第二个参数,"%"最懒模式从右边开始删除,"."以点为标识符即删到标识符停止包括标识符本身,"*"无论是什么全都删除,".2"是NAT网络的默认网关(回看第2章虚拟网络环境);dns=8.8.8.8------设置dns
chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1
hostnamectl hostname $3
chmod 600------给该网络配置文件设置可读可写权限,刷新网络配置,激活网卡,设置主机名称
cat > /etc/hosts<< EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
2 3
EOF
覆盖源解析文件的内容,给ip和主机名添加解析
ip a s $1
hostname
ip a s 1------ip address show 1查看网络信息,输出主机名
6.配置网络环境
编辑内核文件/boot/loader/entries/xxx···xxx.x86_64.conf(系统启动时加载的信息文件),在options(内核启动参数)最后面添加net.ifnames=0,即关闭可预测命名,网卡顺序从0开始,然后重启虚拟机
root@RHEL9 \~# vim /boot/loader/entries/f6cd27ec49f440e9b4301e0c2c22bdcc-5.14.0-570.12.1.el9_6.x86_64.conf

然后删除ens33网卡,通过网络脚本来添加新的ip
root@RHEL9 \~# nmcli connection show
root@RHEL9 \~# nmcli connection delete ens33
root@RHEL9 \~# nmcli connection delete Wired\ connection\ 1
root@RHEL9 \~# ip.sh eth0 192.168.153.137 RHEL9

关闭firewalld和selinux,立即关闭firewalld并锁住,然后修改selinux的数据库文件/etc/sysconfig/selinux,将第22行修改为disabled,再重启就能生效了
root@RHEL9 \~# systemctl disable --now firewalld.service
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
root@RHEL9 \~# systemctl mask firewalld.service
Created symlink /etc/systemd/system/firewalld.service → /dev/null.
root@RHEL9 \~# vim /etc/sysconfig/selinux

7.设置ssh无密登录
root@RHEL9 \~# ssh-keygen -f /root/.ssh/id_rsa -P ""
root@RHEL9 \~# ssh-copy-id -i /root/.ssh/id_rsa.pub root@localhost
root@RHEL9 \~# vim /etc/ssh/ssh_confi
20 Host *
21 StrictHostKeyChecking no
root@RHEL9 \~# cp -rp /root/.ssh/* /etc/skel/
root@RH9gui \~# ls /etc/skel/
authorized_keys id_rsa id_rsa.pub known_hosts known_hosts.old
上面四条命令操作后母盘就做好了,以下是无密登录的解析和测试
添加无密码的公钥和私钥
root@RHEL9 \~# ssh-keygen -f /root/.ssh/id_rsa -P ""
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:lwLgxPKatmPMP4+oEb2B/QqZV84HjortMkji0H16TLY root@RHEL9
The key's randomart image is:
+---RSA 3072----+
| .o |
| .o.. |
| o. . |
| + . . . |
|o.++o S o |
|o==X..+ o |
|@++.=*.. |
|=B*oooE |
|+*=oo+. |
+----SHA256-----+
root@RHEL9 \~# ls /root/.ssh/
id_rsa id_rsa.pub
上锁
root@RHEL9 \~# ssh-copy-id -i /root/.ssh/id_rsa.pub root@localhost
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@localhost's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@localhost'"
and check to make sure that only the key(s) you wanted were added.
然后关闭虚拟机,克隆两台该虚拟机(右击RHEL9.6_db------管理------克隆,依次下一步,分别起名node1、node2),分别通过网络脚本设置ip


在node1主机上远程联连接node2,在node2远程连接node1


远程连接成功后,但每次远程连接都需要输入yes,所以开启母盘RHEL9.6_db,远程连接一下,设置关闭响应
root@RHEL9 \~# man ssh
#查看ssh能用什么命令,多回车几行输入"/-o"找到"StrictHostKeyChecking"参数
冷知识:在远程虚拟机中光标选中后即复制,可通过此操作来快速复制粘贴
root@RHEL9 \~# vim /etc/ssh/ssh_confi
20 Host *
21 StrictHostKeyChecking no


关闭虚拟机后,删除之前克隆出来的node1、node2两台虚拟机(右击该虚拟机------管理------从磁盘中删除),再次通过母盘RHEL9.6_db克隆出两台虚拟机,设置ip,测试远程登录


在两台主机上都执行exit退出登录,在node1上创建一个新用户haha,在node2上远程连接haha用户


通过测试可看到新建立的用户是不能无密登录的,所以再次回到母盘上设置,用过/etc/skel用户的母文件(新建用户时,系统会把母文件下的所有文件和目录复制到新用户的家目录下)来实现新建用户的无密登录,即将/root/.ssh公钥和私钥文件复制到用户的母文件/etc/skel
root@RHEL9 \~# cp -rp /root/.ssh/* /etc/skel/
关闭虚拟机,再次克隆测试新建用户是否能无密登录


至此,母盘就做好了,然后给母盘做一个快照,点击导航栏中间的"时钟+";克隆是建议用完整克隆。
