Expect:使用Expect脚本生成RSA密钥不起作用

时间:2019-01-28 12:08:41

标签: linux tcl expect

我正在尝试使用使用期望脚本的ssh-keygen命令生成SSH密钥,但是它似乎无法正常工作(如果已经存在密钥,则无法创建新密钥或覆盖)我无法解决问题在此。

 #!/usr/bin/expect
spawn ssh-keygen
expect { -re "Enter file in which to save the key.*:\s?" {send "\n\r"; exp_continue}
         -re "Overwrite.*\?\s?" {send "y\r"; exp_continue}
         -re "Enter passphrase.*:\s?" {send "\n\r"; exp_continue}
         -re ".*#\s?" { puts "matched propmt"}
}

脚本执行的输出:

./ssh-key-gen.sh
spawn ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): [root@localhost scripts]#

1 个答案:

答案 0 :(得分:3)

问题是send "\n\r"响应“输入要在其中保存密钥的文件”。 \ n接受默认文件名,然后将\ r应用于“覆盖(y / n)?”。提示。对这个问题的空回答被解释为“否”,因此命令终止。摆脱掉\ n即可。

但是做起来并不容易吗?

set file [file normalize ~/.ssh/id_rsa]
file delete $file
exec ssh-keygen -f $file -N {}

那可以用普通的Tcl完成,不需要期望。