1 expect

  expect软件用于实现非交互式操作,实际应用中常用于批量部署,可以帮助运维人员管理成千上万台服务器.

  expect实现非交互式操作主要是在程序发出交互式询问时,按条件传递程序所需的字符串,如询问yes/no时自动传递yes或no,或询问密码时传递已定义好的密码,这样实现了非交互操作.

1.1 expect安装

  推荐使用yum安装,方便快捷,自动解决依赖问题;如果手动编译,需同时安装expect和tcl软件.

  安装省略,直接yum安装expect即可.

1.2 expect脚本中经常使用的命令及说明

命令 说明
set timeout NUM 设置超时时间,NUM是数字,单位是秒.
expect 进入expect环境下
spawn

expect软件中的监控程序,监控后面程序/命令发出的交互式询问,

spawn是expect环境下的内部命令.

send 发送已定义的字符串或数字密码给程序,完成交互式操作
"string\r"

表示发送string字符串后执行回车操作,程序之间的交互一般使用

"\r"

"string\n"

使用"string\n"表示发送指定的字符串后,并输出内容到终端,

方便用户查看结果.

exp_continue

若问题不存在则继续下一步,回答下面的问题.

注意此项不能加在expect发送自动应答中的最后一项,否则报错.

expect eof

当发送自动应答完毕后,退出expect环境

interact

当发送自动应答完毕后,停留在程序交互界面

set NAME [lindex $argv 0]

定义expect环境下的变量,类似shell中传参$1,$2,...

0代表发送自动应答传递的第一个参数,

1.3 expect结合shell脚本实现主机批量互信

  ssh-copy-id非交互式传递公钥到其他主机,实现互信:

[root@test ~]# ssh-keygen	#<==回车创建rsa
[root@test ~]# mkdir /server/scripts -p
[root@test ~]# cd /server/scripts/
[root@test scripts]# cat auto_ssh-copy-id.exp #<==expect脚本需以.exp后缀结尾并添加x权限执行
#!/usr/bin/expect set timeout 10
set host [lindex $argv 0]
set passwd [lindex $argv 1]
spawn ssh-copy-id $host
expect {
"(yes/no)?"
{
send "yes\n"
expect "*assword:" { send "$passwd\n"}
}
"*assword:"
{
send "$passwd\n"
}
}
expect eof
######用法: ./auto_ssh-copy-id.exp user@host password
[root@test scripts]# chmod +x auto_ssh-copy-id.exp
[root@test scripts]# ./auto_ssh-copy-id.exp root@10.0.0.11 123456
[root@test scripts]# ssh root@10.0.0.11
Last login: Mon Nov 25 20:55:46 2019 from 10.0.0.253

  expect结合shell脚本实现批量互信:

[root@test scripts]# pwd
/server/scripts
[root@test scripts]# vi autossh.sh
[root@test scripts]# cat autossh.sh
#!/bin/sh passwd=123456
user_host=`awk '{print $3}' ~/.ssh/id_rsa.pub` for i in $@
do
/server/scripts/auto_ssh-copy-id.exp $i $passwd >&/dev/null
ssh $i "grep "$user_host" ~/.ssh/authorized_keys" >&/dev/null
if [ $? -eq 0 ];then
echo "$i is successful"
else
echo "$i is failed"
fi
done
[root@test scripts]# chmod +x ./autossh.sh
[root@test scripts]# ls
auto_ssh-copy-id.exp autossh.sh
######用法: /server/scripts/autossh.sh user@host
[root@test scripts]# ./autossh.sh root@10.0.0.70
root@10.0.0.70 is successful
[root@test scripts]# ssh root@10.0.0.70
Last login: Mon Nov 25 21:07:32 2019 from 10.0.0.11

  

  

expect知识梳理的更多相关文章

  1. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  2. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  3. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  4. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  5. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  6. solr DIH 知识梳理

    solr DIH 知识梳理 web.xml中listener配置 <listener> <listener-class>org.apache.solr.handler.data ...

  7. Anliven - 基础知识梳理汇总 - 软件测试

    基础知识梳理 - 软件测试 - 概念 基础知识梳理 - 软件测试 - 分类 基础知识梳理 - 软件测试 - 流程 基础知识梳理 - 软件测试 - 用例 基础知识梳理 - 软件测试 - 方法 基础知识梳 ...

  8. [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型

    引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...

  9. java基础知识梳理

    java基础知识梳理 1 基本数据类型

随机推荐

  1. 修理牛棚 贪心 USACO

    今天开始终于可以刷USACO的题啦 准备每一道都发一个题解 1010: 1.3.2 Barn Repair 修理牛棚 时间限制: 1 Sec  内存限制: 128 MB提交: 9  解决: 7[提交] ...

  2. JSON的学习与使用

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  3. ASP .Net Core MVC如何利用vue提交包含List属性的form表单

    前言 遇到这个问题,是由于自己在mvc项目中使用vue而并不想jquery(人嘛,就是要折腾),并且表单中的一个属性是一个集合. 研究了下Razor如何实现的,用jquery感觉就挺麻烦了,vue用在 ...

  4. python StringIO和ByteIO

    一.StringIO 1.作用:在内存在读写str # 导入模块 from io import StringIO # 实例化StringIO对象 str_io = StringIO() # 向内存中写 ...

  5. [洛谷P4707] 重返现世

    Description 为了打开返回现世的大门,\(Yopilla\) 需要制作开启大门的钥匙.\(Yopilla\) 所在的迷失大陆有 \(n\) 种原料,只需要集齐任意 \(k\) 种,就可以开始 ...

  6. TypeScript 源码详细解读(4)语法1-语法树

    在上一节介绍了标记的解析,就相当于识别了一句话里有哪些词语,接下来就是把这些词语组成完整的句子,即拼装标记为语法树. 树(tree) 树是计算机数据结构里的专业术语.就像一个学校有很多年级,每个年级下 ...

  7. 学习 lind api 十月 第一弹

    step one 我们来看一下代码的结构

  8. 爬虫之pyspider 安装

    解决方法: 利用wheel安装 S1: pip install wheelS2: 进入www.lfd.uci.edu/~gohlke/pythonlibs/,Ctrl + F查找pycurl S3:这 ...

  9. 如何理解 HTMLTestRunner 中 test (result)?UnitTest是如何运行的?

    我们在用Unittest框架时,生成html格式的报告一般都是用HTMLTestRunner.py这个第三方库,大概使用方法如下: with open(config.report_file, 'wb' ...

  10. Shell考题初级篇

    将当前目录下大于10K的文件转移到/tmp目录下 find . -type f -size +10k -exec mv {} /tmp \; 编写一个shell,判断用户输入的文件是否是一个字符设备文 ...