linux中expect的使用
2017-03-01 22:31
274 查看
核心
1、什么是expect
2、expect原理
3、expect的案例
4、expect注意事项
1、expect是什么
使用Linux的程序员对输入密码都不会陌生,在Linux下对用户有严格的权限限制,干很多事情越过了权限就得
输入密码,比如使用超级用户执行命令,又比如scp、ssh连接远程主机等等
比如我们要是 到10.20.24.103这台机器上去。就需要输入密码
那么问题来了,如果我们脚本里面有scp的操作,总不可能执行一次scp就输入密码一次,这样就需要一个人盯着脚本运行了。
为了解决这个问题,我们需要一个自动输入密码的功能
2、expect的原理
针对这种scp或者ssh命令的功能,可能很多人想到的就是勉密钥登录。这种其实可以但是这种在生产环境不建议这么做,不安全。
至于ssh勉密钥登录的操作可以自行去百度。目前大数据上的分布式处理就是用这种方式来建立主机的互信关系的
今天我们主要是讲没有建立信任关系下自动输入密码的功能,这个引入今天的主角 expect
expect是需要安装的
安装的方式也很简单,我们这边用的centos的环境
3、入门脚本
说明
第一行是指定执行的模式,我们平时写shell 是用 #!/bin/bash 等等,这个我们执行我们用 #!/usr/bin/expect
set timeout 20 这个是用来设置相应的时间,如果里面的脚本执行或者网络问题超过了这个时间将不执行,这个timeout模式是10
spawn 表示在expect下面需要执行的shell脚本
expect 是捕获执行shell以后系统返回的提示框内容。”“这个表示提示框里面是否包括这个内容
send 如果expect监测到内容了,那么就将send后的内容发送出去 \n表示回车
interact 表示结束expect回话,可以继续输入,但是不会返回终端
上面脚本测试,我们通过主机SZB-L0032014 用root用户是到SZB-L0032013(10.20.24.103)
4、expect的案例
登录一台机器,将本机的一个文件传到远程机器上
5、注意事项
1、llength argv表示参数的个数2、argv0 表示脚本的名称
3、lindex $argv 0 表示第一个参数,依次类推到n,参数下标是从0开始的
4、if 判断需要用{}括起来
5、if 与后面的{}直接需要有空格
6、expect {},多行期望,匹配到哪条执行哪条,有时执行shell后预期结果是不固定的,有可能是询问是yes/no,有可能是去输入密码,所以可以用expect{}
7、else不能单独放一行,所以else要跟在}后面
8、两个花括号之间必须有空格隔开,比如if {} {},否则会报错 expect:extra characters after close-brace
9、使用{来衔接下一行,所以if的条件后需要加左花括号{
通过各种脚本发现expect
对脚本的格式要求特别高,比如{}直接要空格、else以后需要增加{等等,如果发现不能正常运行,优先检查格式是否有问题
1、什么是expect
2、expect原理
3、expect的案例
4、expect注意事项
1、expect是什么
使用Linux的程序员对输入密码都不会陌生,在Linux下对用户有严格的权限限制,干很多事情越过了权限就得
输入密码,比如使用超级用户执行命令,又比如scp、ssh连接远程主机等等
比如我们要是 到10.20.24.103这台机器上去。就需要输入密码
[root@SZB-L0032014 ~]# ssh 10.20.24.103 root@10.20.24.103's password:
那么问题来了,如果我们脚本里面有scp的操作,总不可能执行一次scp就输入密码一次,这样就需要一个人盯着脚本运行了。
为了解决这个问题,我们需要一个自动输入密码的功能
2、expect的原理
针对这种scp或者ssh命令的功能,可能很多人想到的就是勉密钥登录。这种其实可以但是这种在生产环境不建议这么做,不安全。
至于ssh勉密钥登录的操作可以自行去百度。目前大数据上的分布式处理就是用这种方式来建立主机的互信关系的
今天我们主要是讲没有建立信任关系下自动输入密码的功能,这个引入今天的主角 expect
expect是需要安装的
安装的方式也很简单,我们这边用的centos的环境
[root@SZB-L0032014 ~]# sudo yum install expect
3、入门脚本
[root@SZB-L0032014 ~]# cat expect.sh #!/usr/bin/expect set timeout 20 spawn ssh root@10.20.24.103 expect "root" send "paic1234\n" interact
说明
第一行是指定执行的模式,我们平时写shell 是用 #!/bin/bash 等等,这个我们执行我们用 #!/usr/bin/expect
set timeout 20 这个是用来设置相应的时间,如果里面的脚本执行或者网络问题超过了这个时间将不执行,这个timeout模式是10
spawn 表示在expect下面需要执行的shell脚本
expect 是捕获执行shell以后系统返回的提示框内容。”“这个表示提示框里面是否包括这个内容
send 如果expect监测到内容了,那么就将send后的内容发送出去 \n表示回车
interact 表示结束expect回话,可以继续输入,但是不会返回终端
上面脚本测试,我们通过主机SZB-L0032014 用root用户是到SZB-L0032013(10.20.24.103)
[root@SZB-L0032014 ~]# hostname SZB-L0032014 [root@SZB-L0032014 ~]# ./expect.sh spawn ssh root@10.20.24.103 root@10.20.24.103's password: Last login: Wed Mar 1 08:24:22 2017 from szb-l0032014 [root@SZB-L0032013 ~]# hostname SZB-L0032013
4、expect的案例
登录一台机器,将本机的一个文件传到远程机器上
[root@SZB-L0032014 ~]# cat expect1.sh #!/usr/bin/expect set timeout 20 if { [llength $argv] < 2} { puts "Usage:" puts "$argv0 local_file remote_path" exit 1 } set local_file [lindex $argv 0] set remote_path [lindex $argv 1] set passwd paic1234 set passwderror 0 spawn scp ${local_file} ${remote_path} expect { "password" { if { $passwderror == 1 } { put "passwd is error" exit 2 } set timeout 1000 set passwderror 1 send "paic1234\n" exp_continue } "*es/no)?*" { send "yes\n" exp_continue } timeout { put "connect is timeout" exit 3 } }
5、注意事项
1、llength argv表示参数的个数2、argv0 表示脚本的名称
3、lindex $argv 0 表示第一个参数,依次类推到n,参数下标是从0开始的
4、if 判断需要用{}括起来
5、if 与后面的{}直接需要有空格
6、expect {},多行期望,匹配到哪条执行哪条,有时执行shell后预期结果是不固定的,有可能是询问是yes/no,有可能是去输入密码,所以可以用expect{}
7、else不能单独放一行,所以else要跟在}后面
8、两个花括号之间必须有空格隔开,比如if {} {},否则会报错 expect:extra characters after close-brace
9、使用{来衔接下一行,所以if的条件后需要加左花括号{
通过各种脚本发现expect
对脚本的格式要求特别高,比如{}直接要空格、else以后需要增加{等等,如果发现不能正常运行,优先检查格式是否有问题
相关文章推荐
- 在Linux下灵活使用expect脚本的小窍门
- linux下使用expect交互式操作
- linux 使用expect
- Linux使用expect脚本实现远程机器自动登录
- Linux中使用expect脚本实现远程机器自动登录
- 使用expect实现ssh自动输入密码,从而自动登陆Linux
- UNIX/LINUX使用expect实现人机自己主动交互功能
- linux expect的使用详解
- linux expect的使用详解
- Linux--使用expect进行自动交互
- linux初装ssh,使用expect建立信任关系,搞定烦人的输入密码或者要求yes/no建立指纹
- linux 下expect的使用
- linux expect的使用详解,实例
- 使用perl的expect对linux下使用fdi…
- Linux 下使用expect自动telnet/ssh cisco设备执行ping测试
- 使用expect在linux中实现一些自动化工作
- Linux下expect的安装和使用
- linux下使用expect实现自动化脚本
- Linux使用expect实现免手工密码输入
- Linux使用expect实现远程拷贝文件