“ssh-keygen -A”命令的确切作用是什么?

8
$ ssh-keygen --help
ssh-keygen: unrecognized option: -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa]
              [-N new_passphrase] [-C comment] [-f output_keyfile]
   ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
   ssh-keygen -i [-m key_format] [-f input_keyfile]
   ssh-keygen -e [-m key_format] [-f input_keyfile]
   ssh-keygen -y [-f input_keyfile]
   ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
   ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
   ssh-keygen -B [-f input_keyfile]
   ssh-keygen -D pkcs11
   ssh-keygen -F hostname [-f known_hosts_file] [-l]
   ssh-keygen -H [-f known_hosts_file]
   ssh-keygen -R hostname [-f known_hosts_file]
   ssh-keygen -r hostname [-f input_keyfile] [-g]
   ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
   ssh-keygen -T output_file -f input_file [-v] [-a rounds] [-J num_lines]
              [-j start_line] [-K checkpt] [-W generator]
   ssh-keygen -s ca_key -I certificate_identity [-h] [-n principals]
              [-O option] [-V validity_interval] [-z serial_number] file ...
   ssh-keygen -L [-f input_keyfile]
   ssh-keygen -A
   ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number]
              file ...
   ssh-keygen -Q -f krl_file file ...

您可能会注意到,ssh-keygen -A 缺少明显的文档说明。
$ ssh-keygen -A
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519 

看起来它正在生成所有的密钥文件,但我在/root/.ssh/中没有看到任何密钥。为了确认,我运行了ssh-keygen,没有使用任何选项,按照提示输入了所有内容,预期结果应该是有密钥。

所以问题是,“究竟发生了什么?”


For each of the key types (rsa1, rsa, dsa, ecdsa and ed25519) for which host keys do not exist, generate the host keys.... - David C. Rankin
@DavidC.Rankin,我想我不理解主机密钥的概念。也许你可以扩展一下你的回答/评论。谢谢! - Zak
没问题。主机密钥是系统在使用“ssh、rsync、scp等”交易时用于身份验证的“私有”(和“公共”)密钥对,而不是为非根用户生成的单个“用户”密钥。您也可以以这种方式为用户生成所有密钥,但我认为这更多是系统设置选项。(基本上是生成所有默认密钥,而不必逐个执行它们的选项) - David C. Rankin
2
这个问题更适合于StackExchange网站的Super UserUnix & Linux。(它与"编程",例如编码,无关) - David C. Rankin
1
https://explainshell.com/explain?cmd=ssh-keygen+-A - Biffen
显示剩余2条评论
3个回答

6
这在ssh-keygen手册中有详细说明:

-A

对于没有主机密钥的每个密钥类型(rsa1,rsa,dsa,ecdsa和ed25519),使用默认密钥文件路径,空密码,密钥类型的默认位数以及默认注释生成主机密钥。 这被系统管理脚本用于生成新的主机密钥。

因此,如果您的系统尚未拥有主机密钥,则ssh-keygen -A将创建它们。 重新创建主机密钥会导致SSH客户端在下次连接到该计算机时显示主机密钥指纹已更改的警告信息,您需要更新并保存新的主机密钥。
Are you sure you want to continue connecting (yes/no)? 

(假设您之前已经成功连接到了SSH机器)

4

我猜测问题的一部分是在询问ssh-keygen -A存储结果的位置,这也是我自己想要问的问题,并且我认为我已经找到了答案。

你可以作为普通用户(不是ROOT)运行“ssh-keygen -A”命令来快速查看结果存储在系统中的位置:此时权限将阻止你实际重写任何东西:

user> ssh-keygen -A
ssh-keygen: generating new host keys: RSA1 open /etc/ssh/ssh_host_key failed: Permission denied.
Saving the key failed: /etc/ssh/ssh_host_key.
ssh-keygen: generating new host keys: ED25519 open /etc/ssh/ssh_host_ed25519_key failed: Permission denied.
Saving the key failed: /etc/ssh/ssh_host_ed25519_key.

显示系统级别的密钥存储在 /etc/ssh 中。这可以通过 sshd_config 文件进行配置:
user> grep etc/ssh /etc/ssh/sshd_config 
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

1
根据我所了解的,-A选项生成所有默认的主机密钥。 主机密钥是在SSH协议中用于认证计算机的加密密钥。从ssh.com可以看到一个很好的解释。
当我按下ssh-keygen提示中的回车键时,就会在~/.ssh/文件夹中生成一个密钥;这正是我所期望的。然而,在运行ssh-keygen -A时,我没有在~/.ssh/中看到任何其他密钥。
阅读来自ssh.com的文章后,我发现刚刚创建的密钥位于/etc/ssh/中。 更新: 请查看explainshell.com/explain?cmd=ssh-keygen+-A的文档,如原始问题中@Biffen所建议的!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接