交互式脚本expect场景示例
expect语法示例
#spawn 新建一个进程,这个进程的交互由expect控制
#expect 等待接受进程返回的字符串,直到超时时间,根据规则决定下一步操作
#send 发送字符串给expect控制的进程
#set 设定变量为某个值
#exp_continue 重新执行expect命令分支
#set timeout 30 设置超时时间为30秒,-1不超时,永远等待
#interact 执行完后保持交互状态,如果不加这一项,交互完成会自动退出
#expect eof 等待spawn进程结束后退出信号eof
1.expect实现简单的交互登陆,需要安装expect工具
[root@oldxu shell]# cat expect1.ex
#!/usr/bin/expect
spawn ssh root@172.16.1.7
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "123\r" };
}
interact
2.expect定义变量实现交互方式
[root@oldxu shell]# cat expect2.ex
#!/usr/bin/expect
set ip 172.16.1.7
set user root
set password 123
set timeout 5
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$password\r" };
}
#交互方式
interact
3.expect进行参数传递,执行命令或其他操作
[root@oldxu shell]# cat expect3.ex
#!/usr/bin/expect
set ip [lindex $argv 0] #接收脚本的第一个位置参数
set user root
set password 123
set timeout 5
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$password\r" };
}
#当出现#号符执行如下命令
expect "#"
send "useradd bgx\r"
send "pwd\r"
send "exit\r"
expect eof
4.批量获取在线主机,进行秘钥批量分发
[root@oldxu shell]# cat expect4.sh
#!/usr/bin/bash
#1.清空下ip.txt文件
> ip.txt
#2.获取存活主机的IP,并写入ip.txt文件中
for i in {7..8}
do
ip=172.16.1.$i
{
ping -c1 -W1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip" >> ip.txt
fi
}&
done
wait && echo "IP地址获取成功"
#3.生成对应的密钥
if [ ! -f ~/.ssh/id_rsa ];then
ssh-keygen -P "" -f ~/.ssh/id_rsa
fi
#4.批量分发密钥
while read line
do
/usr/bin/expect <<-EOF
set pass 123
set timeout 2
spawn ssh-copy-id $line -f
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$pass\r" }
}
EOF
done<ip.txt
交互式脚本expect场景示例的更多相关文章
- [转帖]自动交互式脚本--expect
自动交互式脚本--expect https://www.cnblogs.com/zhuiluoyu/p/4873869.html 我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器 ...
- 自动交互式脚本--expect
我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器,然后进行某项工作.这很平常,但是如果把这个工作自动化进行,你就需要一个程序能自动做你要告诉机器的事情,这样,我们的expect就 ...
- linux自动化交互脚本expect详解set timeout 5是 意思是在expect语句中,5s后超时,不再作出选择。
linux自动化交互脚本expect详解 更新时间:2020年10月21日 10:13:20 作者:lendsomething 这篇文章主要介绍了linux自动化交互脚本expect的相 ...
- C#调用Python脚本的简单示例
C#调用Python脚本的简单示例 分类:Python (2311) (0) 举报 收藏 IronPython是一种在 .NET及 Mono上的 Python实现,由微软的 Jim Huguni ...
- shell脚本分为三类:登录脚本、交互式脚本、非交互式脚本
shell脚本分为三类:登录脚本.交互式脚本.非交互式脚本 一. 登录脚本类似于windows下的计算机设置中的登录脚本和账户设置下的登录脚本的合集(我是这么理解的哈). 其配置文件的关键词为pref ...
- expect实现交互式脚本
#!/usr/bin/expect -f ##告诉解释器用expect来解释 set timeout 6 ##设置超时时间 ] ## 这个是传递给脚本的第一个参数,并把参数赋值给user ] ## 这 ...
- expect脚本语言用法示例
#!/usr/bin/expect set hostname [lindex $argv 0] set username [lindex $argv 1] set passwd [lindex $ar ...
- 结合WebSocket编写WebGL综合场景示例
在WebGL场景中导入多个Babylon骨骼模型,在局域网用WebSocket实现多用户交互控制. 首先是场景截图: 上图在场景中导入一个Babylon骨骼模型,使用asdw.空格.鼠标控制加速度移动 ...
- 交互式命令 expect
shell尽管很强大.但是貌似无法完成交互式命令的操作,实例 ssh host 如果host而且该机没有加入信任.手动输入的时间需要password. 这样的情况下可以使用expect支持. 下面举个 ...
随机推荐
- idea安装、配置及基本使用
下载 下载地址:https://www.jetbrains.com/idea/download/#section=windows Ultimate为旗舰版,功能全面,插件丰富,按年收费. Commun ...
- VScode插件:Todo Tree
Todo Tree 用于记录很多需要做但是暂时没办法立即做的事情,如修改样式,日期格式处理等 用法: // TODO: 流程图用canvas重构 然后,你在代码中写的TODO,会被识别出来,点击即可查 ...
- 在jsp页面中通过struts的标签<s:if>来判断选择显示控件
<s:iterator value="#request.users" var="u"> <!-- 判断该条评论的评论人是不是查看这篇评论的用户 ...
- 八大排序算法总结与java实现(转)
八大排序算法总结与Java实现 原文链接: 八大排序算法总结与java实现 - iTimeTraveler 概述 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 ...
- 浅谈Asp.Net中的几种传值方式
一.使用Querystring Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象.如果你想传递一个安全性不是那么太重要或者是 ...
- JS中 (function(){...})()立即执行函数
(function(){...})() (function(){...}()) 这是两种js立即执行函数的常见写法. 基本概念: 函数声明:function fname(){...}; 使用funct ...
- springboot自定义页面拦截
项目结构图 页面拦截代码 @Configuration public class WebConfig implements WebMvcConfigurer { @Override public vo ...
- SpringMVC 字节流实现播放多媒体
1.前言 在项目中,我们会遇到在线预览,播放MP3.图片.MP4等.用户上传文件后,将路径存储在数据库中,我们可动态读取数据库的数据,然后通过返回文件路径的字符串,在src中发送请求.当然这需要带参数 ...
- IIS 安装 .net core 绑定为 https 使用SSL证书
前提条件: 自己服务器(Windows Server 2016)运行 dotnet .\Web****.dll 服务是可以使用http访问的 但由于实际情况必须使用https 思想历程,但未用: 1. ...
- 使用vue搭建应用三引入scss
Css.Sass.Scss的含义及区别 Css(Cascading Style Sheets) 层叠样式表 Sass(Syntactically Awesome StyleSheets) 是一款强化 ...