expect

简介

官方地址:http://expect.sourceforge.net/

代码托管:http://sourceforge.net/projects/expect/?source=navbar

expect 的功能是很强大的,实现了无须人与系统交互的功能, 比如 ssh 需要输入密码,使用此工具则可以在代码中配置

安装

  • 需要先安装 Tcl,详细见 安装文档
  1. tar -zxvf expect5.45.tar
  2. cd expect5.45
  3. ./configure --prefix=/usr/local/expect5.45 --with-tcl=/usr/local/tcl8.6.4/lib --with-tclinclude=/usr/local/tcl8.6.4/include
  4. 如:其他目录
  5. ./configure --prefix=/home/dwadmin/usr/expect5.45 --with-tcl=/home/dwadmin/usr/tcl8.6.4/lib --with-tclinclude=/home/dwadmin/usr/tcl8.6.4/include
  6. make
  7. make install
  8. 会在 tcl 的目录生成 expect
  9. cd /usr/local/tcl8.6.4/bin/
  10. sudo ln -s /usr/local/tcl8.6.4/bin/expect /usr/local/bin/expect
  11. sudo ln -s /usr/local/tcl8.6.4/bin/tclsh8.6 /usr/local/bin/tclsh8.6

使用

1、ssh 登录案例

  1. 1. 代码块
  2. expect << EOF
  3. #set timeout 5
  4. spawn ssh hadoop@192.168.160.44 -p 22
  5. expect "password" {send "angejia888\n"}
  6. #expect "Last login" {send " ifconfig |grep eth0 -A3\n"}
  7. expect eof
  8. exit
  9. EOF
  10. 2. -c 带参数
  11. /usr/bin/expect -c '
  12. #set timeout 5
  13. spawn ssh hadoop@192.168.160.44 -p 22
  14. expect "password" {send "angejia888\n"}
  15. #expect "Last login" {send " ifconfig |grep eth0 -A3\n"}
  16. interact
  17. expect eof
  18. ';

2、高级处理

2.1、普通登录执行命令

  1. #!/bin/bash
  2. auto_login_ssh_cmd () {
  3. ./expect -c "
  4. set timeout -1;
  5. spawn -noecho ssh -o StrictHostKeyChecking=no $1 $3
  6. expect {
  7. *password:* {
  8. send -- $2\r;
  9. }
  10. }
  11. interact
  12. ";
  13. }
  14. auto_login_ssh_cmd hadoop@192.168.160.44 angejia888 "bash -i ls /tmp";

2.2、传送文件

  1. #!/bin/bash
  2. auto_login_scp_data () {
  3. fn_alsd_local_url=$1;
  4. fn_alsd_tager_rul=$2;
  5. fn_alsd_account=$3;
  6. fn_alsd_passwd=$4;
  7. expect -c "
  8. set timeout -1;
  9. spawn -noecho scp -o StrictHostKeyChecking=no $fn_alsd_local_url $fn_alsd_account:$fn_alsd_tager_rul
  10. expect {
  11. *password:* {
  12. send -- $fn_alsd_passwd\r;
  13. }
  14. }
  15. interact
  16. ";
  17. }
  18. auto_login_scp_data /tmp/aaaaa.txt /tmp/bbb.txt hadoop@192.168.160.44 angejia888 ;