【问题标题】:How to non-interactively feed ssh with Time-based One-Time Password?如何使用基于时间的一次性密码以非交互方式提供 ssh?
【发布时间】:2019-07-24 02:59:48
【问题描述】:

一些超级计算机需要基于时间的一次性密码 (OTP) 才能通过 ssh 登录。我想避免每次都输入密码并通过 bash 脚本自动登录/scp/rsync,其中我生成一次性密码,然后使用sshpass 将一次性密码传递给 ssh:

sshpass -p my_password_and_OTP ssh user@hostname

这个sshpass 适用于通常的ssh,但我的测试表明它不适用于需要一次性密码的ssh。我想知道是否有一种方法可以使用基于时间的一次性密码以非交互方式提供 ssh。

【问题讨论】:

  • 取决于此处未提供的实现细节——当在某个主题(如Unix & Linux)重新询问此问题时,您需要包含ssh -vv yourhost 的输出;日志消息将指示 OTP 是如何通过的(重要的是,它是被视为 SSH 级别的身份验证步骤,还是在建立交互式会话后执行)。如果是后者,您将需要类似 Expect 的自动化。
  • @CharlesDuffy 感谢您提供信息。我将尝试调查在我尝试登录的特定机器(NERSC cori)中使用的实现。我希望实现不会使非交互式喂食密码更难或不可能。
  • 这当然不是不可能——最坏的情况,你可以使用ExpectpexpectEmPTY等。

标签: bash ssh expect one-time-password


【解决方案1】:

这是我使用expect+oathtool的解决方案:

#!/usr/bin/expect -f
set otp [exec oathtool --totp -b my_secrete_key]
set timeout -1
spawn scp a.f90 usrname@cori.nersc.gov:~/
expect "Password + OTP:"
send -- "my_passwd${otp}\r"
expect eof

我使用oathtool 生成一次性密码并将结果存储在变量otp 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2012-05-05
    • 2021-12-15
    相关资源
    最近更新 更多