1

Ubuntu で SSH キーの生成を自動化する次のスクリプトを期待しています。スクリプトは期待どおりに実行され、キー ペアが生成されますが、完了するまでに 50 ~ 60 秒かかります。

#!/usr/bin/expect --
eval spawn /usr/bin/ssh-keygen -t rsa

expect -re {Enter file in which to save the key (/root/.ssh/id_rsa): }
send -- "\r"

expect -re {Overwrite (y/n)? }
send -- "y\r"

expect -re {Enter passphrase (empty for no passphrase): }
send -- "\r"

expect -re {Enter same passphrase again:" }
send -- "\r"

puts "\nEnded expect script."

何を変更するためのヒントやヒントはありますか?

編集: Niall Byrne の回答に基づいて、次の期待スクリプトにたどり着きました。これは迅速で、初回のキー生成とキーの再生成 (上書き) を処理します。

#!/usr/bin/expect -f
set timeout -1
spawn /usr/bin/ssh-keygen -t rsa
expect {
  "Enter file in which to save the key" {send -- "\r" ; exp_continue}
  "Overwrite" {send -- "y\r" ; exp_continue}
  "Enter passphrase (empty for no passphrase):" {send -- "\r" ; exp_continue}
  "Enter same passphrase again:" { send -- "\r" ; exp_continue}
  eof
}
4

2 に答える 2

4

あなたの遅延の主な原因は、あなたのプロンプトがExpectと正確に一致していないことだと思います.

expect -re {Overwrite (y/n)? }
send -- "y\r"

ここで正規表現構文を指定します (-re) 期待されるパターンの文字の多くは、予約された正規表現文字です。? ( ) 。

この行の実際の効果は、この行に一致する正規表現を 10 秒間探し、あきらめて y の送信に進むことです。基本的に、「y」を送信する前に 10 秒の遅延を作成しているだけです。コード内の他の行にも同様の特徴があります。

この行を次のように修正することを検討してください。

expect {Overwrite (y/n)?}

また

expect -re {Overwrite.*}

(これはエントロピーに関する懸念に加えて発生しますが、この予想される問題が、発生している遅延の大部分の原因となっています。)

于 2012-11-02T22:06:18.170 に答える
2

エントロピーの欠如に対処している可能性があります。キーを生成するとき、キー ジェネレータはシステム エントロピー/乱数プール (通常は /dev/random) を利用します。ボックスの負荷がほとんどまたはまったくない場合、十分な環境ランダム情報 (ネットワーク トラフィック、ディスク、キーボード、マウス、およびその他の I/O デバイスのタイミング) が収集されるまで、乱数プールはブロックされます。

于 2012-11-02T17:13:04.477 に答える