分类: 服务器与代理 发表时间: 2019年10月19日

标题: 通过sh脚本登录跳板机

摘要: 在跳板机启用二次验证时不能通过简单脚本直接登录,本篇文章记录一下自动登录脚本

确认系统的expect命令

编写自动登录脚本我们需要使用expect命令,如果没有安装可以通过以下方式安装

  • fedora/centos/readhat yum|dnf install expect
  • debian/ubuntu apt install expect
  • macos brew install expect

接下来以macos系统为例进行演示,其他系统基本相同

安装python3与pyotp库

二次验证的密码生成方式一般使用基于时序的算法,我们可以使用python的pyotp库来生成密码

首先安装python3,如果系统已有python3可以跳过,通过命令brew install python3安装,然后使用pip安装扩展库pyotp,命令pip3 install pyotp

编写自动登录脚本

命令vim /usr/local/bin/go-jump-server,将如下内容粘贴进去,并修改相应的区域

  1. #!/usr/bin/expect
  2. set otp [exec python3 -c "import pyotp; print(pyotp.TOTP('你的SECRET字符串').now(), end='')"]
  3. spawn ssh user@jump-server-host
  4. expect "Password:" { send "你的跳板机用户密码\n" }
  5. expect "*code:" { send "$otp\n" }
  6. interact

其中第7和第9行的Password:*code要与你的跳板机在终端输出的内容相匹配,具体expect命令的使用规则可以参考expect的相关教程

最后,对这个脚本赋予执行权限chmod +x /usr/local/bin/go-jump-server

FAQ

怎么获取到SECRET字符串?
在你进行两步验证绑定的时候,一般会给你一个二维码,此二维码通过支付宝的身份宝或者谷歌的谷歌身份验证器扫描后会保存并自动生成验证码,这里需要的SECERT即包含在这个二维码的内容里,可以使用其他任何二维码扫描软件(微信不行)进行扫描,能够解析出二维码的原始内容,其内容类似如下

  1. otpauth://totp/your_user_name%40your_site_name?secret=XXXXXXXXXXXX