RHEL——制作母盘

制作一个红帽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/


关闭虚拟机,再次克隆测试新建用户是否能无密登录


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


相关推荐
bjzhang753 小时前
CentOS下安装MySQL详解
linux·mysql·centos
Jason_chen4 小时前
Linux 6.2 音频机制深度解析:AI驱动的低延迟音频与零信任音频安全架构
linux
下午写HelloWorld4 小时前
Linux系统及Ubuntu常用指令
linux·ubuntu·操作系统
lizhihai_995 小时前
股市学习心得-AI 产业链核心标的梳理清单
大数据·服务器·人工智能·科技·学习
云计算磊哥@6 小时前
运维开发宝典026-MySQL02数据库表操作
运维·数据库·运维开发
weixin_523185326 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端
黄同学real6 小时前
解决 Visual Studio Web Deploy 远程发布报 401 未授权 (ERROR\_USER\_UNAUTHORIZED)
服务器
天天进步20156 小时前
Tunnelto 源码解析 #9:控制服务器设计:Warp、WebSocket、Ping/Pong 与连接保活
运维·服务器·websocket
凡人叶枫7 小时前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发
云栖梦泽7 小时前
玩转RK3506SDK
linux·嵌入式硬件