自动化脚本登录跳板机和服务器

背景介绍

  • 工作中需要登录跳板机和服务器去部署程序,或者是查看项目程序运行状态,避免出现服务不可用的情况。由于登录服务器需要输入多次密码,且还需要二次验证,比较麻烦,采用expect脚本程序可以实现自动化的登录。Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。

Expect安装和语法介绍

安装

  • 在MAC系统中,安装expect可以通过如下命令:brew install expect

语法

  • 类似其他shell脚本,第一句都是用来声明解释器,即expect在电脑上安装的位置。
    #!usr/bin/expect
  • 设置环境变量和参数
    set timeout 5
    set server your_server_address
    set port your_server_port
    set password your_password
    set username your_user_name
  • 执行命令
    spawn ssh -p $port $username@$server
    spawn用于在expect中执行命令,其中$port是取port中的值,即通过set命令设置的值。
  • 预料返回值
    expect "Password:"
    通过expect命令,即判断上次输入之后的返回值是否含有上述字符内容,进行匹配双引号内部的字符。
  • 输入值
    send "$password\r"
    通过send命令就可以实现程序自动输入密码,其中$password也是取之前set的password的值,\r则是标识回车操作的意思。
  • 其他
    若还需要继续预测返回值,可以采用如下命令:
    exp_continue
    若执行自动登录后,默认会直接退出,不会留在远程的服务器上。若需要获得控制权,可以在脚本代码后添加这句:
    interact
    执行expect脚本时可以输入一些命令行参数,然后在脚本程序中使用这些参数,其中0表示第1个参数
    [lindex $argv 0]

简单示例

通过跳板机,两步验证登录服务器,示例代码如下:

!/usr/bin/expect
set timeout 5
set jump server 127.0.0.1
set port 8080
set username test
set userpasswd test
set VerifyCode [lindex $argv 0]
spawn ssh -p $port $username@$jumpserver
expect {
 "*assword:" { send "$userpasswd\r"; exp_continue }
 "Verification code" {send "$VerifyCode\r"}
}
interact

假定上面脚本文件名称为test.sh,另外二步验证码为12345,保证test.sh脚本有可执行权限,若不行,需通过chmod命令添加可执行权限。执行命令如下:
./test.sh 12345

参考文献

[1]http://www.cnblogs.com/iloveyoucc/archive/2012/05/11/2496433.html
[2]http://blog.csdn.net/ljchlx/article/details/44221413

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值