bash - 从脚本使用otp调用ssh

标签 bash ssh one-time-password

我的公司使用ssh上的OTP(一次性密码)来访问我们的生产机器。交互可能看起来像这样:

$ ssh prod
otp-md5 942 st9621 extResponse: 

此时,我运行一个Java程序,以使用从SSH获得的信息生成OTP响应。 注意:必须将ssh输出(在此示例中为“942 st9621”)中的哈希值作为输入传递给波纹管。每当您使用ssh时,此哈希值都会更改。
$ java -jar jop.jar 942 st9621 <password>
LAD DARN BHOY TEST ACHE JUTE

现在,我将生成的OTP(“LAD DARN BHOY TEST ACHE JUTE”)剪切并粘贴到另一个控制台窗口中。

因此,为了使所有事情变得清楚:我在运行jop和密码的同时,需要使用ssh命令生成的数据,然后将结果传递回仍在运行的ssh命令。

我很想自动化这个过程。基本上,有一个bash脚本,它需要一个主机名,要求输入密码,然后调用ssh,将otp-md5代码传递给jop,然后将OTP传递回ssh。一个不错的选择是而不是不必输入我的密码作为命令行参数,因为这将被存储在命令历史记录中,这是一个很大的安全问题。

这可能吗?

谢谢

最佳答案

未经测试。期望脚本可能类似于

#!/usr/bin/env expect
set otp [exec java -jar jop.jar 942 st9621 [lindex $argv 0]]
spawn ssh prod
expect -re {extResponse: *$}
send -- "$otp\r"
interact

您可以这样使用:optssh.exp <password>
响应更新,仍然未经测试。
#!/usr/bin/env expect
spawn ssh prod
expect -re {otp-md5 ([^ ]+) ([^ ]+) extResponse: *$} {
    set otp [exec java -jar jop.jar $expect_out(1,string) $expect_out(2,string) [lindex $argv 0]]
    send -- "$otp\r"
}
interact

关于bash - 从脚本使用otp调用ssh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9523694/

相关文章:

linux - Unix 按列整数过滤

regex - awk 模式匹配语法 c&&!--c

docker - 轻松访问 Windows Docker 容器上的文件

ssh - 无法 ssh 到 vagrant + virtualbox(来自 vmware)

c# - OtpSharp 无法与 google 身份验证器配合使用

java - RFC4226 HOTP Java 实现

php - 每次执行按钮操作时如何将值插入数据库表

linux - 我怎样才能删除字符串并使用它前面的数字

bash - wget : read URL from file, 将数字序列添加到 URL

git - 错误 : waitpid for C:\Program Files (x86)\PuTTY\plink. exe 失败:没有子进程