题目
一、for创建20个用户,用户前缀由用户输入,用户初始密码由用户输入。
二、for循环ping测试指定网段的主机,网段由用户输入。
三、使用for/while实现批量主机root密码的修改
一、for创建20个用户,用户前缀由用户输入,用户初始密码由用户输入。
例如:test01,test10
1、编写脚本
[root@client_2 homework4]# vim add20user.sh
#!/bin/bash
read -p "please input username's prefix:" namepre
read -p "please input initial password:" passwd
count=20
for name in ${namepre}{01..20}
do
	useradd $name &> /dev/null
	if [ $? -eq 0 ];then
		echo $passwd | passwd $name --stdin &> /dev/null
	else
		echo "user $name already exists."
		let count--
	fi
done
echo "created $count users successfully"2、加可执行权限
[root@client_2 homework4]# chmod a+rx add20user.sh3、测试





二、for循环ping测试指定网段的主机,网段由用户输入。
例如用户输入192.168.5 ,则ping 192.168.5.1 --- 192.168.5.10,并将结果保存到文件中。
 UP: /tmp/host_up.txt
 Down: /tmp/host_down.txt
1、创建记录文件
[root@client_2 homework4]# touch /tmp/host_up.txt
[root@client_2 homework4]# touch /tmp/host_down.txt2、编写脚本
[root@client_2 homework4]# vim forPing.sh 
#!/bin/bash
read -p "please input network segment:" seg
for ip in ${seg}.{1..10}
do
	if ping -c2 $ip &> /dev/null ;then
		date >> /tmp/host_up.txt
		echo "$ip is up" >> /tmp/host_up.txt
	else
		date >> /tmp/host_down.txt
		echo "$ip is down" >> /tmp/host_down.txt
	fi
done3、加可执行权限
[root@client_2 homework4]# chmod a+rx forPing.sh4、测试

三、使用for/while实现批量主机root密码的修改
成功或失败都必须记录
 提示:主机IP存放在一个文件中
 SSH:实现公钥认证,执行远程中主机命令
 实现公钥认证
 # ssh-keygen 在用于管理的主机上生成密钥对
 # ssh-copy-id -i 192.168.2.3
1、创建主机IP文件
[root@client_2 homework4]# vim host_ip.txt
192.168.5.128
192.168.5.129
192.168.5.1312、与文件中写入的主机配置免密登录
本地创建密钥对:(192.168.5.130本机)
[root@client_2 homework4]# ssh-keygen
使对端对本地授权登录(要保证对端的家目录下有.ssh目录):
[root@client_2 .ssh]# ssh-copy-id root@192.168.5.128
[root@client_2 .ssh]# ssh-copy-id root@192.168.5.129
[root@client_2 .ssh]# ssh-copy-id root@192.168.5.131检查免密登录是否成功(略)
3、编写脚本
for循环:
[root@client_2 homework4]# vim chpwd_ssh.sh 
#!/bin/bash
read -p "please input new password for hosts:" passwd
for line in `cat /root/shell/homework4/host_ip.txt`
do
	ssh root@$line "echo $passwd | passwd root --stdin" &> /dev/null
	if [ $? -eq 0 ];then
		echo "$line change password successfully"
	else
		echo "$line change password failed"
	fi
donewhile循环:
[root@client_2 homework4]# vim chpwd_ssh.sh 
#!/bin/bash
read -p "please input new password for hosts:" passwd
exec < /root/shell/homework4/host_ip.txt
while read line
do
	ssh -n root@$line "echo $passwd | passwd root --stdin" &> /dev/null
	if [ $? -eq 0 ];then
		echo "$line change password successfully"
	else
		echo "$line change password failed"
	fi
done注意:while循环读取文件是从文件中每读入一行执行一次循环,ssh -n是为了防止ssh命令执行后文件数据读入到对端主机而造成程序终止循环。ssh -n等价于ssh < /dev/null
4、测试
关闭192.168.5.128主机以模拟失败

over~












![buuctf-misc-[GKCTF 2021]你知道apng吗1](https://img-blog.csdnimg.cn/a53b4ede82b24bc4ac9e0e219518f4b2.png)






