2012-03-01 22 views
2

私の会社では、ssh(One Time Password)上のOTPを使用して本番マシンにアクセスしています。対話は次のようになります。スクリプトからotpを使用してsshを呼び出す

$ ssh prod 
otp-md5 942 st9621 extResponse: 

この時点で、私はSSHから取得した情報を使用してOTP応答を生成するJavaプログラムを実行します。 注: ssh出力(この例では "942 st9621")からのハッシュは、入力としてコマンドのベローに渡される必要があります。このハッシュはあなたがsshを実行するたびに変わります。

$ java -jar jop.jar 942 st9621 <password> 
LAD DARN BHOY TEST ACHE JUTE 

は今、私はカットし、他のコンソールウィンドウに生成されたOTP( "LAD DARN BHOY TEST ACHEジュート")を貼り付けます。だから、

、ちょうどすべてを明確にする:私は、sshコマンドから生成されたデータの一部は、私のパスワードと組み合わせJOPを実行するときに使用する必要があり、その結果が戻って、まだ実行中、sshコマンドに渡されます。

私はこのプロセスを自動化したいと思います。基本的には、ホスト名をとり、パスワードを求めてからsshを呼び出し、otp-md5コードをjopに渡し、さらにOTPをsshに戻すbashスクリプトを用意します。これがコマンド履歴に格納され、大きなセキュリティ上の問題であるため、にはにパスワードを入力する必要があります。

これは可能ですか?

あなたは

+0

あなたは本当にあなたがすべてを自動化したい場合は代わりにOTPのSSHキーを使用することを検討すべきです。 – ThiefMaster

+0

ええ、私は実際に私たちの設定を支配していません。私はほのぼのと笑顔でやってみようとしています。) – oneself

答えて

1

これは、グレン・ジャックマンによって投稿優れた回答に基づいている:

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

あなたはSSHと対話するためのexpectを見てみることができありがとうございました。

1

未テスト。更新への対応optssh.exp <password>

、まだテストされていない:スクリプトは、あなたがそのように使用したい

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

のようなものかもしれません期待しています。

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

私は私の質問を明確にしました。この例では、md5ハッシュ( "942 st9621")です。それは "ssh"の呼び出しから来る必要があります。 – oneself

+0

ありがとう、これは本当に良いスタートです。私はそれを開発し、テスト済みのソリューションを投稿します。 – oneself

関連する問題