题目
一、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.sh
3、测试
二、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.txt
2、编写脚本
[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
done
3、加可执行权限
[root@client_2 homework4]# chmod a+rx forPing.sh
4、测试
三、使用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.131
2、与文件中写入的主机配置免密登录
本地创建密钥对:(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
done
while循环:
[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~