$ ssh-keygen -t rsa -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Enter passphrase (empty for no passphrase):
3)最后,我们将使用-N标志输入无效通行证:
$ ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Your identification has been saved in /home/klashxx/.ssh/id_rsa.
Your public key has been saved in /home/klashxx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Xo0t6caMB/8TSsigxfY28JIfqYjyqxRZrFrPncx5yiU klashxx@server
The key's randomart image is:
+---[RSA 2048]----+
| |
| . |
| o . |
| + * = |
| +. + BSo= o |
|...o.+o+XO... |
|.. .o.E==+B. . |
|o . ...=.o... |
|.+o. o .. |
+----[SHA256]-----+
上面给出的命令创建了一个4096位的RSA密钥,密码短语为空。Enter file in which to save the key (.../.ssh/id_rsa):,因此在stdin中加入一个换行符(\n),以自动接受默认文件名。如果键已经存在,它将不执行任何操作。 但是,如果您确实希望自动覆盖现有密钥而不进行任何提示,请使用(* 这是原始问题的真实的答案,但它在这里是为了防止不阅读就复制和粘贴的人无意中覆盖 *):
8条答案
按热度按时间j8ag8udp1#
我们需要自动完成两个步骤:
1.输入密码。使用
-N
标志(本例中为空字符串):ssh-keygen -t rsa -N ''
1.覆盖密钥文件:
使用
-f
输入路径(在本例中为id_rsa
),再加上here-string,即可对以下问题回答 yes:或者,在类似
bash
的shell下,如果您确实要覆盖以前的,则仅使用here-string来 * 提供命令 * 所需的 * 输入 *:来自
ssh-keygen
* 手册 * 页:逐步说明
1)要避免输入密钥,请使用
-f
:注意事项:如果您不关心RSA文件名,并且确实想覆盖以前的文件名,请查看下面第四点的说明。
2)现在,我们需要对 *overwrite问题 * 自动回答“y”(让我们对该作业使用 here-string):
3)最后,我们将使用
-N
标志输入无效通行证:4)Extra ball,清除输出,只检查返回代码:
覆盖以前的RSA文件的替代路径(不需要-f标志)
注:仅
bash
类 shell 。如果您不关心RSA名称,只想覆盖它,则需要自动回答以下两个问题:
1.输入保存密钥的文件:/示例/路径/.ssh/id_rsa已存在。
1.是否覆盖(y/n)?
如果我们手动执行此操作,对于第一个问题,我们只需按 enter,对于第二个问题,键入
y
并按enter
。我们可以使用下面的 here-string 来模拟这些操作:
$'\ny'
个从
bash
缐上手册:$'string'形式的单词将被特殊处理。该单词将扩展为“string”,并按照ANSI C标准的指定替换反斜杠转义字符。
\n新行
因此,如果我们使用
od
来分析字符串:我们看到,我们得到的正是我们需要回答的问题。
第1点和第2点可总结为:
最后的命令是
荣誉
@lukasz-dynowski,@redochka,@mellow-yellow,@yeti和这条线上的其他人。
jdg4fx2g2#
如果您不想提示用户输入保存密钥的文件,则可以在命令中添加文件输出标志
-f
。ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
这样就不会提示用户输入任何内容-除非id_rsa文件已存在。
qco9c6ql3#
没有一个答案完全符合预期。所需的行为:使用默认设置运行ssh-keygen(就像我们刚刚发送了垃圾邮件Enter),而不提示输入。
要运行的命令为:
如果您想打印输出,请忽略〉/dev/null。
说明:
yes y
spams 'y',ssh-keygen从字面上理解它,并使$PWD/y和$PWD/ www.example.com中的键y.pub。如果.ssh目录不存在,则使用-f ~/.ssh/id_rsa指定文件会失败。如果rsa是默认类型,则不需要-t rsa选项(我们是垃圾输入反正)。密码不是从stdin读取(我们是垃圾输入),而是直接从键盘读取,所以没有什么可以拦截它。因此,您需要指定-N ''为空密码。7gyucuyw4#
对我来说,当在ssh命令中使用时,我必须同时使用@Lukasz答案和@Juan一
irlmq6kh5#
在我的Dockerfile(From node:8.13.0)中,下面的代码运行良好:
yes 'y' | /usr/bin/ssh-keygen
更完整的示例:
kninwzqo6#
接受的答案仍然指定了一个自定义文件名。这对我很有效:
-t rsa
指定要创建的密钥类型(RSA)。-b 4096
指定要创建的密钥中的位数(4096位)。-N ''
提供密码短语(本例中为空)。<<<
shell 部件:“here string”将字符串输入到ssh-keygen的stdin中。$'\n'
换行符(使用$使单引号字符串解释特殊字符)。上面给出的命令创建了一个4096位的RSA密钥,密码短语为空。
Enter file in which to save the key (.../.ssh/id_rsa):
,因此在stdin中加入一个换行符(\n
),以自动接受默认文件名。如果键已经存在,它将不执行任何操作。但是,如果您确实希望自动覆盖现有密钥而不进行任何提示,请使用(* 这是原始问题的真实的答案,但它在这里是为了防止不阅读就复制和粘贴的人无意中覆盖 *):
要使ssh-keygen标准输出静音,请添加
-q
(安静)选项或>/dev/null
:gajydyqb7#
删除当前私钥以防止覆盖请求。
j5fpnvbx8#
根据上面的答案,我创建了自己的版本
我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,我的意思是,|铅拷贝
它会自动创建ssh密钥并将公钥复制到剪贴板--〉这允许我粘贴到github,azure dev...