expect学习

1.什么是except
        Expect是基于Tcl的一个相对简单的免费脚本文件语言工具,用于实现自动和交互式程序进行通信
            is a software suite for automating interactive tools
    2.Expect程序工作流程
        spawn启动进程 -> expect 期待关键字 ->send 向进程发送密码字符 ->退出结束
    3.Expect语法
        spawn:是Expect的初始命令,之后所有的Expect操作都在这个进程
            spawn  命令
            spawn  ssh-copy-id -i $file oldgirl@$host
        expect:匹配内容的输出,一旦匹配上就执行expect后面的命令,依附spawn执行
            特有参数: -re ,表示使用正则表达式的方式匹配
            expect 表达式 动作 表达式 动作 .....   
            expect "*password:"  {send "123456\r"}   -->发那个在第二行不需要大括号了
                --> expect "*password:"
                    send "123456\r"
        send:配合使用
        continue:多用于连续匹配多个命令的场景
            它完成的工作是从头开始遍历
                也就是说,
                    没有这个命令,匹配完成第一个关键字后就会继续匹配第二个关键字(或的关系)
                    有这个命令,匹配完成第一个关键字后第二次匹配任然从第一个关键字开始(与的关系)
        send_user:把后面的参数输出到标准输出(屏幕)中去,send/exp_send命令默认是输出到程序中
            send_user "please input the passwd:\r"
        exit:直接退出脚本,但是也可以做一些扫尾工作
            exit -onexit {
                exec rm $tmpfile
                send_user "good bye\n"
            }
        expect变量:
            set  变量名 变量值     -->设置
            puts $变量名           -->读取
                set host [lindex $argv 1]    -->接受命令行的参数,取第一个参数
        expect关键字:
            用于匹配过程,代表某个状态,一般用于命令族,而不能单独使用
            eof:用于文件的结束符,ftp的终止等,一般后面跟上动作做进一步控制
                eof {ftp connect close}
            timeout:全局性的时间控制开关
                set timeout 60  ==> expect {-timeout 60}
                    0:立即超时 
                   -1:永不超时
                expect timeout {puts "Expect was timeout"; return}

expect安装

源码安装:
1.下载expect和tcl
下载地址:https://files.cnblogs.com/files/ftl1012/expect-5.43.0.tar%E5%92%8Ctcl8.4.11-src.tar.zip
2.安装expect
tar -zxvf tcl8.4.11-src.tar.gz
tar -zxvf expect-5.43.0.tar.gz
cd tcl8.4.11/unix
./configure
make && make install
cd expect-5.43
./configure --with-tcl=/usr/local/lib/ --with-tclinclude=/data/software/tcl8.4.11
make && make install

  yum安装:

yum install expect

编写expect&&Shell脚本用于批量管理用户免密登录

1.exp脚本,用于ssh公钥传输

    #! /usr/local/bin/expect
if { $argc !=2 } {
send_user "usage :expect dispatch_sshkey.expect file host \n"
exit
}
#define var
set file [lindex $argv 0]
set host [lindex $argv 1]
set password "hhh"
#spawn scp /home/omd/2017-08-23 root@192.168.25.137:/home/omd
#spawn scp -P11544 $file root@$host:$dir
#spawn ssh-copy-id -i $file "-p 11544 root@$host:$dir"
#spawn ssh-copy-id -i .ssh/id_dsa.pub omd@192.168.25.137
spawn ssh-copy-id -i $file oldgirl@$host
expect {
-timeout 30
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
timeout {puts "expect was timeout by omd"; return}
}
expect eof

2.sh脚本, 用于批量管理

 #! /bin/sh
. /etc/init.d/functions
for ip in `cat /etc/hosts|grep "192.168.25.13[5 6 7]" |awk '{print $1}' `
do
/usr/local/bin/expect /data/scripts/dispatch_sshkey.exp ~/.ssh/id_dsa.pub $ip
if [[ $? -eq 0 ]]; then
action "$ip" /bin/true
else
action "$ip" /bin/false
fi
done

  其他参考

Linxu下 expect的实用实例_1

Linxu下 expect的实用实例(jump)_2

Linxu下 expect的安装与使用的更多相关文章

  1. linux下expect环境安装以及简单脚本测试

    expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,是一款很实用的批量部署工具!expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装 下 ...

  2. Linxu下 expect的实用实例_1

    案例 例1:从本机自动登录到远程机器192.168.1.200(端口是22,密码是:PASSWORD)登录到远程机器后做以下几个操作:1)useradd wangshibo2)mkdir /opt/t ...

  3. 阿里云Linxu下的Mysql安装与配置

    说明:本文主要详细介绍了关于如何在阿里云ECS服务器上安装并配置Mysql 环境:Centos 7版本,阿里云部署好系统后会默认安装mariadb数据库 1.删除阿里云自带的MariaDB # rpm ...

  4. 【转】CentOS下expect 安装

      Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来做一些linux下无法做到交互的一些命令操作,在远程管理方面发挥很大的作用. spawn命令激活一个Unix程序 ...

  5. [转]expect的安装

    转自:http://blog.chinaunix.net/uid-20639775-id-2453085.html Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来 ...

  6. Linux 下Telnet 服务安装

    Linux 下Telnet 服务安装 注:以下所有命令均在root用户下执行. 命令测试在Linxu版本6.x下完成,部分命令不适用Linux 7.0以上 1.简介 默认情况下Linux只安装了Tel ...

  7. 用了一天的时间,linux下expect实现ssh自动登录服务器记,鄙视下网上各种抄来抄去残段子

    因为要对客户方的快30个项目进行特别有顺序的重启,所以不得不想办法写个脚本,网上看了不少段子.真是残缺的可以.没有一段是可以正常运行的.我来按顺序记录一下 脚本的本身 使用expect实现自动登录的脚 ...

  8. expect交互式安装软件

    公司一些宿主机需要安装软件,吴老师要求写一个安装脚本: 脚本思路:首先要把安装的包拷贝到每台机器上,然后要让每台机器都运行一次安装命令:就想到了应用scp.ssh命令,但这两个命令需要输入对端密码,需 ...

  9. expect的安装与使用

    expect的安装与使用 是什么 expect 是用来进行自动化控制和测试的工具.主要是和交互式软件telnet ftp ssh 等进行自动化的交互. 如何安装 1.检测是否安装 ls /usr/bi ...

随机推荐

  1. manjaro 添加tash 快捷方式

    -In your home directory open /.local/share/applications/-Right click in this folder and create a emp ...

  2. 让字体在div容器中垂直居中

    1. 只显示一行数据的话: 给容器设置height和line-height,并使两个值相等,再加上over-flow:hidden .test{ height:40px; line-height:40 ...

  3. Compiler Principle

    1.Einleitung 1.1 Der Überblick über Compiler 1.1.1 Lexikalische Analyse Die lexikalische Analyse zer ...

  4. unity简易ui框架

    在unity项目开发中,ui模块的开发往往占据了很大一部分工作,部分游戏甚至绝大部分的工作都是在ui上,如何高效管理各种界面,这里分享一套高效易用的UI框架. 首先,我们定义一个PanelBase类, ...

  5. nginx timeout 配置 全局timeout 局部timeout web timeout

    nginx比较强大,可以针对单个域名请求做出单个连接超时的配置. 比如些动态解释和静态解释可以根据业务的需求配置 proxy_connect_timeout :后端服务器连接的超时时间_发起握手等候响 ...

  6. json的使用(JObect,JsonData,JArray)

    JObect与JsonData的区别 JsonData是JObect的简化版本 2.转换过程容易出的bug JsonData:当里面存在null就无法转换 解决方案: JsonData teamjd ...

  7. 批量删除SVN文件

    开发过程中,有时需要将SVN目录中的SVN相关的信息去掉,有两种简单方法可以做到: 一,用SVN的export功能 二,将下面的这段文字写在.reg结尾的文本文件中,然后执行.这样你在每个文件夹右击的 ...

  8. 基于ASP.NET Core 创建 Web API

    使用 Visual Studio 创建项目. 文件->新建->项目,选择创建 ASP.NET Core Web 应用程序. 基于 ASP.NET Core 2.0 ,选择API,身份验证选 ...

  9. [javaSE] 进制转换(二进制十进制十六进制八进制)

    十进制转二进制,除2运算 十进制6转二进制是 110  (注意从右往左写,使用算式从下往上写) 二进制转十进制,乘2过程 二进制110转十进制  0*2的0次方+1*2的1次方+1*2的2次方=6 对 ...

  10. sprintf 格式化字符串

    好久没写博客了,又遇到自己觉得很傻的问题,格式化字符串还要找下 定义和用法 sprintf() 函数把格式化的字符串写入变量中. arg1.arg2.++ 参数将被插入到主字符串中的百分号(%)符号处 ...