
我想用一个命令行来执行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"?
投票
如果你想要一个单行本,可以试试
expect -c 'spawn ssh-keygen; expect : { send \n; exp_continue} eof'
expect中的字符串不使用 '
用于引用。您可以使用 ""
或 {}
取决于你的字符串。使用 .*
的模式在本例中没有任何实际作用,所以您可以直接在 :
. 使用 exp_continue
将循环执行相同的期望语句。eof
匹配文件的结尾。
投票
你不需要 expect
的。只需用下面的命令指定一个空的密码,就可以了。-N
选项。
ssh-keygen -f foo -N ''