我们需要自动完成两个步骤:
-
输入密码。使用-N 标志(此示例为空字符串):
ssh-keygen -t rsa -N ''
-
覆盖密钥文件:
使用-f 输入路径(在本例中为id_rsa)加上一个here-string 来回答yes以下问题:
ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
或者,在类似 bash 的 shell 下,如果您肯定要覆盖前一个,只需使用 here-string 来输入命令 有所有需要的输入:
ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
来自ssh-keygenman 页面:
-N new_passphrase provides the new passphrase.
-q silence ssh-keygen.
-f filename specifies the filename of the key file.
分步说明
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/klashxx/.ssh/id_rsa):
1) 为避免输入密钥,请使用-f:
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)?
注意:如果您不关心 RSA 文件名并且肯定想覆盖之前的文件名,请查看以下第四点的说明。
2) 现在我们需要对覆盖问题自动回答“y”(让我们使用here-string 来完成该工作) :
$ 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]-----+
4) 多余的球,清理输出,只检查返回码:
$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
$ echo $?
0
覆盖先前 RSA 文件的替代路径(不需要 -f 标志)
注意:只有bash 像shell。
如果您不关心 RSA 名称而只想覆盖它,我们需要自动回答这两个问题:
-
输入要保存密钥的文件:/example/path/.ssh/id_rsa 已存在。
-
覆盖(y/n)?
如果我们手动执行此操作,对于第一个问题,我们只需按 enter,对于第二个问题,输入 y 并按 enter。
我们可以使用下面的here-string来模拟这些动作:
$'\ny'
来自bash 手册页:
$'string' 形式的单词被特殊处理。该词扩展为
“字符串”,用反斜杠转义字符替换为指定的
ANSI C 标准。
\n 换行
所以,如果我们使用od 来分析我们的字符串:
cat - <<< $'\ny' | od -c
0000000 \n y \n
我们看到我们得到了回答问题所需要的东西。
第 1 点和第 2 点可以概括为:
ssh-keygen -q -t rsa <<< $'\ny'
最终命令将是:
$ ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
$ echo $?
0
荣誉
@lukasz-dynowski、@redochka、@mellow-yellow、@yeti 以及本主题中的其他人。