我正在尝试使用使用期望脚本的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]#
答案 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完成,不需要期望。