目的
KVM創(chuàng)建虛機(jī)后,想從宿主機(jī)去配置IP地址。本文介紹兩種方式,能夠通過(guò)shell腳本配置虛擬機(jī)IP地址
方法一
guestmount工具
guestmount 能夠?qū)⑻摂M機(jī)的磁盤掛載到宿主機(jī)上面,再通過(guò)修改磁盤里配置文件的方式達(dá)到更改IP目的,宿主機(jī)需要安裝軟件包libguestfs和libguestfs-tools
此方法不需要知道虛機(jī)賬號(hào)密碼也可操作,除了改IP還能改其他的,別瞎整哦文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-613799.html
#!/bin/bash
#author 對(duì)你無(wú)語(yǔ)
#傳參:虛機(jī)名稱,網(wǎng)卡接口名稱,IP,掩碼,網(wǎng)關(guān)
#需要安裝guestmount工具
#在不登陸虛擬機(jī)的情況下,修改虛擬機(jī)的IP地址信息
#獲取虛機(jī)名稱,-p是提示符
read -p "please input the Virtual machine name:" name
#如果虛擬機(jī)狀態(tài)為running,則強(qiáng)制關(guān)閉虛機(jī),開機(jī)不能操作喲
#關(guān)機(jī)用destroy強(qiáng)制關(guān)機(jī),用shutdown會(huì)很慢,甚至有時(shí)關(guān)不掉
if virsh domstate $name|grep -q running ;then
echo "shutdown the Virtual machine ..."
virsh destroy $name
fi
#宿主機(jī)上創(chuàng)建掛載點(diǎn)mountpoin目錄,
mountpoint="/media/v_path"
[ ! -d $mountpoint ] && mkdir $mountpoint
echo "創(chuàng)建mountpoin目錄"
#確認(rèn)沒(méi)有掛載mountpoin
if mount | grep -q "$mountpoint" ;then
umount $mountpoint
echo "已存在掛載點(diǎn),卸載mountpoint"
fi
#安裝guestmount,已存在也不會(huì)重復(fù)安裝
if rpm -q libguestfs|grep -q not ;then
yum install libguestfs libguestfs-tools -y
echo "guestmount安裝中"
fi
#掛載虛機(jī)全部磁盤
guestmount -d $name -i $mountpoint
#用戶輸入虛擬機(jī)網(wǎng)卡信息,和想要配置的IP地址
read -p "請(qǐng)輸入需要修改的網(wǎng)卡名稱:" dev
read -p "請(qǐng)輸入IP地址:" addr
read -p "請(qǐng)輸入掩碼地址:" netmask
read -p "請(qǐng)輸入網(wǎng)關(guān)地址:" gateway
# 判斷原本網(wǎng)卡配置文件中是否有IP地址,有,就修改該IP,沒(méi)有,就添加一個(gè)新的IP地址
if grep -q "IPADDR" $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev;then
sed -i "/IPADDR/s/=.*/=$addr/" $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
sed -i "/NETMASK/s/=.*/=$netmask/" $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
sed -i "/GATEWAY/s/=.*/=$gateway/" $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
sed -i "/BOOTPROTO/s/=.*/=static/" $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
else
sed -i "/BOOTPROTO/s/=.*/=static/" $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
echo "IPADDR=$addr" >> $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
echo "NETMASK=$netmask" >> $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
echo "GATEWAY=$gateway" >> $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
fi
# 判斷配置文件是否有此IP了
awk -F= -v ip=$addr '$2==ip{print "修改IP成功"}' $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
# 配置完成后刪除掛載點(diǎn)
umount $mountpoint
# 啟動(dòng)虛機(jī)
virsh start $name
方法二
expect工具
expect是一個(gè)免費(fèi)的編程工具,能用于shell自動(dòng)的交互式任務(wù),要用的話需要先手動(dòng)安裝,配置過(guò)程百度很多
此方法需要你知道虛機(jī)賬號(hào)密碼文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-613799.html
#!/usr/expect/bin/expect
# 獲取虛擬機(jī)參數(shù)
set virshname [lindex $argv 0]
set ipaddr [lindex $argv 1]
set NETMASK [lindex $argv 2]
set GATEWAY [lindex $argv 3]
# 打開虛擬機(jī)控制臺(tái)連接
spawn virsh console $virshname
# 等待一段時(shí)間以確保虛擬機(jī)啟動(dòng)
sleep 5
set timeout 10
send "\r"
# 匹配登錄提示并發(fā)送用戶名
expect {
"login:" {
send "root\r"
exp_continue
}
timeout {
# 在5秒超時(shí)后跳過(guò)登錄步驟并執(zhí)行下面的命令
}
}
# 匹配密碼提示并發(fā)送密碼
expect {
"Password:" {
send "ENsafe@2022\r"
exp_continue
}
timeout {
# 在5秒超時(shí)后跳過(guò)登錄步驟并執(zhí)行下面的命令
}
}
# 等待一段時(shí)間以確保登錄完成
sleep 2
# 判斷原本網(wǎng)卡配置文件中是否有IP地址,有,就修改該IP,沒(méi)有,就添加一個(gè)新的IP地址
send "grep -q 'IPADDR' /etc/sysconfig/network-scripts/ifcfg-eth0 && echo '1111' || echo '0000'\r"
expect {
"1111" {
send "echo 1111\r"
send "sed -i '/^BOOTPROTO/ s/.*/BOOTPROTO=static/' '/etc/sysconfig/network-scripts/ifcfg-eth0'\r"
send "sed -i '/^IPADDR/ s/.*/IPADDR=${ipaddr}/' '/etc/sysconfig/network-scripts/ifcfg-eth0'\r"
send "sed -i '/^NETMASK/ s/.*/NETMASK=${NETMASK}/' '/etc/sysconfig/network-scripts/ifcfg-eth0'\r"
send "sed -i '/^GATEWAY/ s/.*/GATEWAY=${GATEWAY}/' '/etc/sysconfig/network-scripts/ifcfg-eth0'\r"
}
"0000" {
send "echo 0000\r"
send "echo 'IPADDR=${ipaddr}' >> /etc/sysconfig/network-scripts/ifcfg-eth0\r"
send "sed -i '/^BOOTPROTO/ s/.*/BOOTPROTO=static/' '/etc/sysconfig/network-scripts/ifcfg-eth0'\r"
send "sed -i '/^NETMASK/ s/.*/NETMASK=${NETMASK}/' '/etc/sysconfig/network-scripts/ifcfg-eth0'\r"
send "sed -i '/^GATEWAY/ s/.*/GATEWAY=${GATEWAY}/' '/etc/sysconfig/network-scripts/ifcfg-eth0'\r"
}
}
# 改了之后重啟網(wǎng)絡(luò)使之生效
send "systemctl restart network.service\r"
expect "$ "
# 退出登錄
send "exit\r"
exit
到了這里,關(guān)于從KVM宿主機(jī)配置KVM虛擬機(jī)IP的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!