如何以基于时间的一次性密码非交互地提供ssh?

时间:2019-03-02 05:13:06

标签: bash ssh expect one-time-password

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

sshpass -p my_password_and_OTP ssh user@hostname

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

1 个答案:

答案 0 :(得分:0)

这是我使用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中。