命令行快速登录有OTP二次验证的堡垒机/跳板机

status
Published
type
Post
slug
jump-server-quick-login-by-shell-script
date
Jan 7, 2021
tags
Shell
Tool
Linux
summary
该方法通过 Shell 脚本自动输入 TOTP 验证码,实现快速登录堡垒机。通过修改 SSH Config 文件和编写 Shell 脚本,可以在终端中直接通过命令登录到堡垒机,无需手动输入密码和二次验证码。这样可以大大提高登录的效率。但是需要注意的是,这种方法可能会牺牲一定的安全性,所以建议仅在个人可信环境下使用。
应用部署的服务器全部需要通过堡垒机(Jump Server)登录。每次想要在服务器上查看信息或调整配置时,整个流程都特别繁琐(个人感觉):
这其中二次验证码是通过TOTP实现的,在首次登录账户时用支持的客户端扫描二维码绑定,之后就需要在登录时输入客户端上实时的验证码。
我们还可以借助浏览器扩展使用:Authenticator
借助它可以实现在网页中上快速粘贴二次验证码,免去每次还需要打开手机查看的麻烦。当然其他类似 UTools / Raycast / Alfred 之类效率软件也可通过相应插件做到。
TOTP是Time-based One-Time Password的简写,表示基于时间戳算法的一次性密码。TOTP算法是一种从共享密钥和当前时间计算一次性密码的算法。它已被采纳为Internet工程任务组标准RFC 6238,是Initiative for Open Authentication(OATH)的基石,并被用于许多双因素身份验证系统。TOTP是基于散列的消息认证码(HMAC)的示例。它使用加密哈希函数将密钥与当前时间戳结合在一起,生成一个基于时间的一次性密码。
但是 Web 再好也不如直接用 Terminal 来得干脆,作为命令行爱好者,下面通过 SSH config 文件和 Shell 脚本来实现不用手动输入密码及二次验证码即可登录到堡垒机,从而能快速登录目标应用服务器。
  • SSH config
    • Jump Server 支持 终端登录。(官网文档
      修改本机 SSH Config 如下:
      此时即可在终端中通过 ssh jms 命令实现终端登录,但此时我们仍需要手动输入二次验证码,下面通过脚本来实现自动输入。
  • Shell 脚本
    • 这段代码是一个 expect 脚本,其中用到了oathtool --totp -b OJHH6WISWHHNTVWH 来获取二次验证码,oathtool 是一个用于生成和验证一次性密码的命令行工具,这个命令使用了以下参数:
      --totp:指定生成基于时间的一次性密码(TOTP)
      -b OJHH6WISWHHNTVWH:指定密钥
      其中密钥即为首次绑定两步验证时那个二维码的内容,借助二维码解析工具就可以得到。
       
      将以上脚本保存命名为 jump ,添加执行权限 chmod +x jump,执行./jump 即可快速在终端上登录到堡垒机,进而访问应用服务器。
       
      以上方案牺牲了一定的安全性,与堡垒机两步验证本身的初衷是相违背的,故仅建议在个人可信环境下使用,毕竟有些时候还是效率为先,终端的体验在某些方面还是要胜过Web Shell的。

2020 - 2024 © HK