如何在没有提示的情况下执行ssh-keygen

时间:2017-04-05 15:11:20

标签: linux bash shell ssh

我想在Centos7上使用shell脚本自动生成一对ssh密钥,我试过了

yes "y" | ssh-keygen -t rsa
echo "\n\n\n" | ssh-keygen...
echo | ssh-keygen..

所有这些命令都不起作用,只输入一个'enter'并且shell脚本停止在“输入密码短语(没有密码短语为空)”, 我只是想知道如何在shell中连续模拟多个'enter'。

非常感谢有人可以提供帮助!

7 个答案:

答案 0 :(得分:23)

只需使用-N标志输入空格:

ssh-keygen -t rsa -N ""

来自 man 页面:

 -N new_passphrase
         Provides the new passphrase.

覆盖id_rsa

 yes y |ssh-keygen -q -t rsa -N '' >/dev/null

答案 1 :(得分:21)

如果您不想提示用户输入要保存密钥的文件,则可以在命令中添加文件输出标志-f

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

这样就不会提示用户输入任何 id_rsa 文件。

答案 2 :(得分:1)

对我来说,在ssh命令中使用时,我必须同时使用@Lukasz答案和@Juan的组合

ssh -p$SSH_PORT -q joker@$INSTANCE_IP 'yes y | ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa'

答案 3 :(得分:0)

没有一个答案完全符合预期。所需的行为:在没有提示输入的情况下,使用默认设置(例如,如果我们只是向Enter发送垃圾邮件)运行ssh-keygen。

要运行的命令是:

yes '' | ssh-keygen -N >/dev/null

如果要打印输出,请忽略> / dev / null。

说明:
是y垃圾邮件y ssh-keygen从字面上接受并在$ PWD / y和$ PWD / y.pub中创建密钥。是的''垃圾邮件空行(Enter)这是我们想要的。如果.ssh目录不存在,则使用-f〜/ .ssh / id_rsa指定文件失败。如果rsa是默认类型,则-t rsa选项不是必需的(无论如何我们都是垃圾邮件输入)。密码不是从stdin(我们正在发送垃圾邮件)中读取的,而是直接从键盘读取的,因此没有人可以拦截它。因此,您需要为空密码指定-N”。

答案 4 :(得分:0)

在我的Dockerfile中(从node:8.13.0开始),以下操作很好:yes 'y' | /usr/bin/ssh-keygen

更完整的示例:

yes 'y' | /usr/bin/ssh-keygen -q -N '' -t rsa -f /etc/ssh/ssh_host_rsa_key && \
yes 'y' | /usr/bin/ssh-keygen -q -N '' -t dsa -f /etc/ssh/ssh_host_dsa_key

答案 5 :(得分:0)

删除当前私钥以防止覆盖请求。

rm -f ~/.ssh/id_rsa && ssh-keygen -m PEM -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa

答案 6 :(得分:0)

接受的答案仍指定自定义文件名。这对我有用:

ssh-keygen -t rsa -b 4096 -N '' <<<$'\n'
  • -t rsa指定要创建的密钥类型(RSA)。
  • -b 4096指定要创建的密钥中的位数(4096位)。
  • -N ''提供密码短语(在这种情况下为空)。
  • <<<外壳程序的一部分:“此处为字符串”,用于将字符串输入ssh-keygen的stdin。
  • $'\n'换行符(使用$使单引号引起来的字符串解释特殊字符)。

上面给出的命令创建一个具有空密码短语的4096位RSA密钥。它要求:Enter file in which to save the key (.../.ssh/id_rsa):,因此将换行符(\n)输入到stdin中,以自动接受默认文件名。如果密钥已经存在,它将不会执行任何操作。

但是,如果您确实希望在没有任何提示的情况下自动覆盖现有密钥,请使用(这是原始问题的真正答案,但这是为了防止意外覆盖对于不阅读而复制和粘贴的人):

ssh-keygen -t rsa -b 4096 -N '' <<<$'\ny\n'

静音 ssh-keygen标准输出,请添加-q(安静)选项或>/dev/null

ssh-keygen -t rsa -b 4096 -N '' <<<$'\n' >/dev/null