shell编程练习,实现循环创建账户、测试主机连通性、批量修改主机root密码等功能
实验环境:linux(openeuler)虚拟机
实验要求
1、编写脚本for1.sh,使用for循环创建20账户,账户名前缀由用户从键盘输入,账户初始密码由用户输入,例如:test1、test2、test3、. test10
2、编写脚本for2.sh,使用for循环,通过ping命令测试网段的主机连通性,IP前3段由用户输入,如:输入192.168.48 ,则ping 192.168.205.130-192.168.205.140,将可以ping通的主机IP地址写入到 /tmp/host_up.txt文件中,不能ping通的主机IP地址写入到:/tmp/host_down.txt文件中
3、使用for循环实现批量主机root密码的修改
(1)打开多台主机
(2)使用ssh-keygen命令建立密钥对
(3)多台主机间通过ssh-copy-id进行免密登录
(4)编写脚本for3.sh,通过for循环登录主机修改对方root账户密码
第一题
#!/bin/bash# 功能:循环创建20个账户并且修改密码read -p "请输入用户名前缀:" prefix
read -p "请输入账户密码:" passwordfor ((i=1;i<=20;i++))
doid -u $prefix$i &> /dev/nullif (($?!=0))thenuseradd $prefix$iecho $password | passwd $prefix$i --stdin > /dev/nullelseecho "$prefix$i用户已经存在,不再创建"fi
done
编写完成后进行测试
可见用户已经成功创建,脚本没有问题。
第二题
本题的网段改为自己主机所在的网段
#!/bin/bash# 功能:该脚本用于检测网段中130-140主机是否连通read -p "请输入网段前三段:" netfor i in {130..140}
do ip=$net.$iecho "正在测试$ip..."ping -c 2 -w 3 $ipif (($?==0))then echo "$ip可通" >> /tmp/host_up.txtelse echo "$ip不可通" >> /tmp/host_down.txtfi
done
然后测试脚本
可见脚本没有问题
第三题
本题使用三台主机,其中两台主机作为被修改密码的一端,一台主机作为修改密码的一段(该主机需要配置ssh免密登录)
接下来配置免密登录
首先建立密钥对
[root@master ~]# ssh-keygen -t rsa
输入该命令然后回车就行
然后将密钥上传给另外两个主机
首次上传需要输入对方密码
到这里免密已经配置成功了
然后可以先建立一个文本文件将需要修改密码的主机的ip存进去
然后编写脚本
#!/bin/bash# 功能:可以将列表中的主机的密码全部统一修改read -p "请输入密码:" passwordfor i in $(cat /root/ip.txt)
do ssh $i "echo $password | passwd --stdin root"
done
最后进行测试
这里两个用户分别重新连接xshell确定密码修改成功
至此三个实验全部完成。