expect批量应答模式(在shell中实现expect函数执行)

expect无shell中特殊函数
整合两个环境在shell中实现expert批量应答模式
1、使用脚本ssh连接
要求:
命令行执行脚本名称后跟ip,实现自动连接并输出主机名

vim auth_ssh.sh

在这里插入图片描述
测试:
在这里插入图片描述
2、检测60-80台主机能否连接通,登陆能连通的主机,将其主机名输入文件/mnt/host_list

vim ssh.sh

在这里插入图片描述

测试:
此时我的真机ip为172.25.254.76主机名为foundation76.ilt.example.com
在这里插入图片描述
此时我的另一台虚拟机ip为172.25.254.67主机名为foundation67.ilt.example.com
在这里插入图片描述
此试验在172.25.254.176虚拟机上进行:
在这里插入图片描述
在这里插入图片描述
解放输出中出现^M的问题:
在这里插入图片描述
在这里插入图片描述
此时正常输出:
在这里插入图片描述
注意:
替换时的^M是在键盘上敲ctrl+v ctrl+M出现的
3、检测60-80台主机是否正常运行,自动登陆每台主机,判断主机中是否有用户,没有就创建

vim auto_ssh.sh
	#!/bin/bash
	Auto_Connect()
	{
		/usr/bin/expect <<EOF
		spawn ssh root@$1 $2
		expect {
		"yes/no" { send "yes\r";exp_continue }
		"password:" { send "westos\r"}
	}
	expect eof
	EOF
	}
	Max_Line=`awk 'BEGIN{N=0}{N++}END{print N}' $1`
	for NUM in {60..80}
	do
	ping -c1 -w1 172.25.254.$NUM &> /dev/null
	if [ "$?" = "0" ]
	then
	for Line_Num in `seq 1 $Max_Line`
	do
	USERNAME=`sed -n ${Line_Num}p $1`
	PASSWORD=`sed -n ${Line_NUm}p $2`
	User_State=`Auto_Connect 172.25.254.$NUM "getent passwd $USERNAME" | grep - E "spawn|authenticity|ECDSA|yes|Warning:|password:" -v` #登陆从未登陆过的主机时会显示提示行,需屏蔽显示
	[ -z "$User_State" ] && {   #如果有内容输出
			Auto_Connect 172.25.254.$NUM "useradd $USERNAME && echo $PASSWORD | passwd --stdin $USERNAME" &> /dev/null     #建立用户并且设置密码
    }
	done
	fi
	done

在这里插入图片描述
此时真机76上建立好了用户strudent
在这里插入图片描述
注意:
在给User_State赋student的id值时过滤掉的内容为登陆时会出现的提示行
在这里插入图片描述
getent passwd student相当于cat /etc/passwd | grep student
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值