带有 expect in 1 命令行且没有密码的 ssh-keygen

ssh-keygen with expect in 1 command line and no passphrase

我正在尝试使用一个命令行来执行 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)

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

为什么 ssh-keygen 在应该收到 \n 时却抱怨收到了“'”?

如果你想要单线试试

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

expect 中的字符串不使用 ' 进行引用。您可以根据您的字符串使用 ""{}。在此示例中,模式中 .* 的使用没有实际用途,因此您也可以只匹配 :exp_continue 的使用将循环遍历相同的 expect 语句。 eof 匹配文件结尾。

您不需要 expect。只需使用 -N 选项指定一个空密码。

ssh-keygen -f foo -N ''