某些超级计算机需要基于时间的一次性密码(OTP)才能通过ssh
登录。我想避免每次都输入密码,并通过bash脚本自动执行login / scp / rsync,在该脚本中,我生成一次性密码,然后使用sshpass
将一次性密码传递给ssh:
sshpass -p my_password_and_OTP ssh user@hostname
此sshpass
适用于通常的ssh
,但我的测试表明它不适用于需要一次性密码的ssh
。我想知道是否有一种方法可以非交互式地使用基于时间的一次性密码输入ssh。
答案 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
中。