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 \<\

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 \<\ > \[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/


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


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


相关推荐
释怀不想释怀2 小时前
Linux命令--echo~反引号符~重定向符(>>)~tail命令
linux·运维·服务器
Max_uuc2 小时前
【C++ 硬核】给单片机装上“反射”:手写极简属性系统 (Property System) 自动化 CLI 开发
运维·自动化
云小逸2 小时前
【Nmap 设备类型识别技术】整体概况
服务器·c语言·网络·c++·nmap
路由侠内网穿透.3 小时前
fnOS 飞牛云 NAS 本地部署私人影视库 MoonTV 并实现外部访问
运维·服务器·网络·数据库·网络协议
Doro再努力3 小时前
【Linux05】Linux权限管理深度解析(二)
linux·运维·服务器
鱼跃鹰飞3 小时前
Leetcode:97.交错字符串
linux·服务器·leetcode
Gofarlic_oms13 小时前
通过Kisssoft API接口实现许可证管理自动化集成
大数据·运维·人工智能·分布式·架构·自动化
Suchadar4 小时前
Docker基础命令(二)——数据卷管理端口映射与容器互联
运维·docker·容器
firstacui4 小时前
Docker容器网络管理与容器数据卷管理
运维·docker·容器