期望速度的脚本

时间:2012-11-02 17:09:43

标签: ubuntu-12.04 expect ssh-keys

我有以下期望脚本来自动化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
}

2 个答案:

答案 0 :(得分:4)

我认为延迟的主要原因是您的提示与Expect完全不符。

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

你在这里指定正则表达式语法(-re)你期望模式中的许多字符都是保留的正则表达式字符ie。 ? ()。

这一行的真正效果是它将寻找与此行匹配的正则表达式10秒,然后放弃并继续发送y。你基本上只是在发送'y'之前创建一个10秒的延迟。代码中的其他行具有相似的特征。

考虑将此行修改为:

expect {Overwrite (y/n)?}

expect -re {Overwrite.*}

(这是对熵的关注,但是这个预期问题是造成你看到的大部分延迟的原因。)

答案 1 :(得分:2)

你可能正在处理缺乏熵。生成密钥时,密钥生成器利用系统熵/随机数池(通常为/ dev / random)。如果盒子几乎没有负载,随机数池将阻塞,直到可以收集到足够的环境随机信息(网络流量,磁盘,键盘,鼠标和其他I / O设备的时间)。