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

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

vim auth_ssh.sh

expect批量应答模式(在shell中实现expect函数执行)_第1张图片
测试:
在这里插入图片描述
2、检测60-80台主机能否连接通,登陆能连通的主机,将其主机名输入文件/mnt/host_list

vim ssh.sh

expect批量应答模式(在shell中实现expect函数执行)_第2张图片

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

vim auto_ssh.sh
	#!/bin/bash
	Auto_Connect()
	{
		/usr/bin/expect < /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

expect批量应答模式(在shell中实现expect函数执行)_第8张图片
此时真机76上建立好了用户strudent
在这里插入图片描述
注意:
在给User_State赋student的id值时过滤掉的内容为登陆时会出现的提示行
expect批量应答模式(在shell中实现expect函数执行)_第9张图片
getent passwd student相当于cat /etc/passwd | grep student
在这里插入图片描述

你可能感兴趣的:(expect批量应答模式(在shell中实现expect函数执行))