#!/bin/bash
for i in {140..150} #从140到150选取
do #循环开始
{
ip=192.168.183.$i #$i 是刚刚选区的变量 组成ip地址
ping -c1 -W1 $ip &>/dev/null # -c1 表示ping一次 -W1表示ping的超时时间可快速执行 &>/dev/null 输入到垃圾箱
if [ $? -eq 0 ];then #进行判断上面ping的ip 是否能连通
echo "$ip" >>ip_up.txt #如果连通则输出到ip_up.txt
else
echo "$ip 网络异常 " >>ip_down.txt #不能连通则输出到ip_down.txt
fi
# /usr/bin/expect 是命令路径(记得安装expect) Shell中通常将EOF与 << 结合使用 为了将非交互的内容得以实现
/usr/bin/expect <<-EOF
set timeout 10 # 设置超时时间
#spawn是执行expect之后后执行的内部命令开启一个会话 用于执行shell语句
spawn ssh-copy-id root@$ip
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "1\r" };
}
expect eof #在等待结束标志,由spawn启动的命令在结束时会产生一个eof标记,expect eof 即在等待这个标记
EOF
ssh root@$ip #测试远程登录
if [ $? -eq 0 ];then #判断是否登录成功
echo "$ip 免密成功" >>ip_up.txt
fi
}&
done #循环结束
wait
echo "收工"