expect
简介
官方地址:http://expect.sourceforge.net/
代码托管:http://sourceforge.net/projects/expect/?source=navbar
expect 的功能是很强大的,实现了无须人与系统交互的功能, 比如 ssh 需要输入密码,使用此工具则可以在代码中配置
安装
- 需要先安装 Tcl,详细见 安装文档
tar -zxvf expect5.45.tarcd expect5.45./configure --prefix=/usr/local/expect5.45 --with-tcl=/usr/local/tcl8.6.4/lib --with-tclinclude=/usr/local/tcl8.6.4/include如:其他目录./configure --prefix=/home/dwadmin/usr/expect5.45 --with-tcl=/home/dwadmin/usr/tcl8.6.4/lib --with-tclinclude=/home/dwadmin/usr/tcl8.6.4/includemakemake install会在 tcl 的目录生成 expectcd /usr/local/tcl8.6.4/bin/sudo ln -s /usr/local/tcl8.6.4/bin/expect /usr/local/bin/expectsudo ln -s /usr/local/tcl8.6.4/bin/tclsh8.6 /usr/local/bin/tclsh8.6
使用
1、ssh 登录案例
1. 代码块expect << EOF#set timeout 5spawn ssh hadoop@192.168.160.44 -p 22expect "password" {send "angejia888\n"}#expect "Last login" {send " ifconfig |grep eth0 -A3\n"}expect eofexitEOF2. -c 带参数/usr/bin/expect -c '#set timeout 5spawn ssh hadoop@192.168.160.44 -p 22expect "password" {send "angejia888\n"}#expect "Last login" {send " ifconfig |grep eth0 -A3\n"}interactexpect eof';
2、高级处理
2.1、普通登录执行命令
#!/bin/bashauto_login_ssh_cmd () {./expect -c "set timeout -1;spawn -noecho ssh -o StrictHostKeyChecking=no $1 $3expect {*password:* {send -- $2\r;}}interact";}auto_login_ssh_cmd hadoop@192.168.160.44 angejia888 "bash -i ls /tmp";
2.2、传送文件
#!/bin/bashauto_login_scp_data () {fn_alsd_local_url=$1;fn_alsd_tager_rul=$2;fn_alsd_account=$3;fn_alsd_passwd=$4;expect -c "set timeout -1;spawn -noecho scp -o StrictHostKeyChecking=no $fn_alsd_local_url $fn_alsd_account:$fn_alsd_tager_rulexpect {*password:* {send -- $fn_alsd_passwd\r;}}interact";}auto_login_scp_data /tmp/aaaaa.txt /tmp/bbb.txt hadoop@192.168.160.44 angejia888 ;
