我想在Centos7上使用shell脚本自动生成一对ssh密钥,我试过了
yes "y" | ssh-keygen -t rsa
echo "\n\n\n" | ssh-keygen...
echo | ssh-keygen..
所有这些命令都不起作用,只输入一个'enter'并且shell脚本停止在“输入密码短语(没有密码短语为空)”, 我只是想知道如何在shell中连续模拟多个'enter'。
非常感谢有人可以提供帮助!
答案 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