expect -- 自动登录ssh 堡垒机

 常用命令:

# 命令行参数 
# $argv,参数数组,使用[lindex $argv n]获取,$argv 0为脚本名字
# $argc,参数个数
set username [lindex $argv 1]  # 获取第1个参数
set passwd [lindex $argv 2]    # 获取第2个参数
 
set timeout 30 # 设置超时
 
# spawn是expect内部命令,开启ssh连接
spawn ssh -l username 192.168.1.1
 
# 判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间(timeout)后返回
expect "password:"
 
# 发送内容ispass(密码、命令等)
send "ispass\r"
 
# 发送内容给用户
send_user "$argv0 [lrange $argv 0 2]\n"
send_user "It's OK\r"
# 执行完成后保持交互状态,控制权交给控制台(手工操作)。否则会完成后会退出。
interact

自动登录ssh 

#!/usr/bin/expect -f  
set ip [lindex $argv 0 ]         # 接收第1个参数,作为IP
set username [lindex $argv 1 ]   # 接收第2个参数,作为username
set mypassword [lindex $argv 2 ] # 接收第3个参数,作为密码
set timeout 10                   # 设置超时时间 
 
spawn ssh $username@$ip       # 发送ssh请求
expect {                      # 返回信息匹配 
"*yes/no" { send "yes\r"; exp_continue}  # 第一次ssh连接会提示yes/no,继续  
"*password:" { send "$mypassword\r" }    # 出现密码提示,发送密码  
} 
interact        # 交互模式,用户会停留在远程服务器上面

参考:http://xstarcd.github.io/wiki/shell/expect.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章