【问题标题】:Calling ssh with otp from a script从脚本中使用 otp 调用 ssh
【发布时间】:2012-03-01 20:38:54
【问题描述】:

我的公司使用 OTP over ssh(一次性密码)来访问我们的生产机器。交互可能如下所示:

$ 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。一个很好的办法是不必输入我的密码作为命令行参数,因为这将存储在命令历史记录中,这是一个很大的安全问题。

这可能吗?

谢谢

【问题讨论】:

  • 如果您希望一切自动化,您应该真正考虑使用 SSH 密钥而不是 OTP。
  • 是的,我无法控制我们的设置。我只是一个卑微的用户,试图耸耸肩和微笑;)。

标签: bash ssh one-time-password


【解决方案1】:

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

#!/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 &lt;password&gt;

响应更新,仍未测试。

#!/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

【讨论】:

  • 我已经澄清了我的问题。在此示例中,md5 哈希(“942 st9621”)。它需要来自对“ssh”的调用。
  • 谢谢,这是一个非常好的开始。我会开发它并发布一个经过测试的解决方案。
【解决方案2】:

这是基于 glenn jackman 发布的出色答案:

#!/usr/bin/env expect

# Get host from command line
set host     [lindex $argv 0]

# Read password from the user
send_user "Password: "
# Turn off echo to hide password
stty -echo
expect -re "(.+)\n"
set password $expect_out(1,string)
# Turn echo back on
stty echo

# SSH into server
spawn ssh "$host"
expect -re {otp-md5 ([^ ]+) ([^ ]+) extResponse: *$} {
    set otp [exec java -jar jop.jar $expect_out(1,string) $expect_out(2,string) "$password"]
    send_user "\n$otp"
    send -- "$otp\r"
}
interact

【讨论】:

    【解决方案3】:

    您可以查看expect 以了解与 SSH 的交互。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-27
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 2019-05-20
      • 2017-05-30
      相关资源
      最近更新 更多