Bootstrap

Bash脚本编写

题目要求:

1. 编写脚本for1.sh,使用for循环创建20账户,账户名前缀由用户从键盘输入,账户初始密码由用户输入,例如:test1、test2、test3、……、test10

2. 编写脚本for2.sh,使用for循环,通过ping命令测试网段的主机连通性,网段前3段由用户输入,如:输入192.168.48,则ping 192.168.48.125-192.168.48.135,将可以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账户密码

  1. 编写脚本for1.sh,使用for循环创建20账户
#!/bin/bash

echo "请输入账户名前缀:"
read -r prefix
echo "请输入账户初始密码:"
read -r -s password

for i in {1..20}; do
    useradd "${prefix}${i}"
    echo "${password}" | passwd --stdin "${prefix}${i}"
done
echo "创建账户完成"

        2. 编写脚本for2.sh,使用for循环,通过ping命令测试网段的主机连通性

#!/bin/bash

echo "请输入网段前3段:"
read -r network_prefix

> /tmp/host_up.txt
> /tmp/host_down.txt

for i in {125..135}; do
    ip="${network_prefix}.${i}"
    if ping -c 1 -W 1 "$ip" > /dev/null; then
        echo "$ip" >> /tmp/host_up.txt
    else
        echo "$ip" >> /tmp/host_down.txt
    fi
done

echo "测试完成,连通的主机IP地址已写入/tmp/host_up.txt,不连通的主机IP地址已写入/tmp/host_down.txt"

        3. 使用for循环实现批量主机root密码的修改

#!/bin/bash

echo "请输入主机列表文件路径(每行一个IP地址):"
read -r host_file
echo "请输入新的root密码:"
read -r -s new_password

# 创建密钥对
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa

# 读取主机列表文件,进行免密登录设置
while IFS= read -r ip; do
    ssh-copy-id "root@$ip"
done < "$host_file"

# 编写脚本for3.sh,通过for循环登录主机修改对方root账户密码
cat > for3.sh << 'EOF'
#!/bin/bash

new_password="$1"
echo -e "$new_password\n$new_password" | passwd root
EOF
chmod +x for3.sh

# 遍历主机列表,执行修改密码脚本
while IFS= read -r ip; do
    scp for3.sh "root@$ip":/tmp
    ssh "root@$ip" "/tmp/for3.sh" "$new_password"
done < "$host_file"

# 清理
rm for3.sh
echo "批量修改root密码完成"

然后将将以上三个脚本保存为for1.sh、for2.sh和第三个需求的脚本文件名分别保存,然后在终端中使用chmod +x命令使脚本具有可执行权限。在执行脚本时,请确保以具有适当权限的用户身份运行。

练习完成。

;