+-
ssh-keygen,只需1个命令行,不需要密码。

我想用一个命令行来执行ssh-keygen,并在没有进一步的用户输入的情况下生成密钥(没有密码)。

我以为这样就够了

expect -d -c "spawn ssh-keygen; expect -re {.*: } { send '\n' }; expect -re {.*: } { send '\n' }; expect -re {.*: } { send '\n' }" 

然而在最后一步之后,就直接退出了。

再尝试一层

expect -d -c "spawn ssh-keygen; expect -re {.*: } { send '\n' }; expect -re {.*: } { send '\n' }; expect -re {.*: } { send '\n' }; expect -re {.*: } { send '\n' }"

它抱怨 Saving key "'" failed: passphrase is too short (minimum five characters)

为什么期待ssh-keygen命令在第一次尝试时没有完成就退出?

为什么ssh-keygen抱怨说他收到了"'",而他应该收到的是"/n"?

1
投票

如果你想要一个单行本,可以试试

expect -c 'spawn ssh-keygen; expect : { send \n; exp_continue} eof'

expect中的字符串不使用 ' 用于引用。您可以使用 ""{} 取决于你的字符串。使用 .* 的模式在本例中没有任何实际作用,所以您可以直接在 :. 使用 exp_continue 将循环执行相同的期望语句。eof 匹配文件的结尾。

2
投票

你不需要 expect 的。只需用下面的命令指定一个空的密码,就可以了。-N 选项。

ssh-keygen -f foo -N ''