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. map + 前缀和

    B. Balanced Substring time limit per test 1 second memory limit per test 256 megabytes input standar ...

  2. Asp.Net Core Identity 隐私数据保护

    前言 Asp.Net Core Identity 是 Asp.Net Core 的重要组成部分,他为 Asp.Net Core 甚至其他 .Net Core 应用程序提供了一个简单易用且易于扩展的基础 ...

  3. CBV 序列化

    一.模型表 from django.db import models # Create your models here. class Publish(models.Model): name = mo ...

  4. Qt Installer Framework翻译(4)

    教程:创建安装程序 本教程描述如何为一个小项目创建一个简单的安装程序: 本节描述创建安装程序所必须完成的步骤: 创建一个包文件夹,其中将包含所有配置文件和可安装的包. 创建一个配置文件,其中包含有关如 ...

  5. 创建dynamics CRM client-side (七) - 用JS 来控制Auto-Save

    在我们的system setting里面, 我们可以设置打开/关闭 auto save的功能. 我们可以用js来控制auto-save this.formOnSave = function (exec ...

  6. Mybatis基础(一)

    mybatis概述: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...

  7. php编译完php.ini加载问题-Loaded Configuration File (none)

    编译安装php7时指定了--with-config-file-path=/usr/local/php7/etc,修改了 php.ini 的配置后重启,但就是不生效. 出现Loaded Configur ...

  8. mybatis入门案例分析

    mybatis入门案例分析 一.设计模式分析 public class MybatisTest { public static void main(String[] args) throws Exce ...

  9. OpenCV中Mat与二维数组之间的转换

    ---恢复内容开始--- 在OpenCV中将Mat(二维)与二维数组相对应,即将Mat中的每个像素值赋给一个二维数组. 全部代码如下: #include <iostream> #inclu ...

  10. 微信小程序 客户端时间 与 服务端时间

    服务端时间 db.serverDate(); 在操作数据库,上传数据的时候可以使用服务端时间 wx.cloud.init();//初始化云 const db = wx.cloud.database() ...