`ssh-keygen -A`到底是做什么用的?

时间:2018-02-26 08:05:59

标签: linux ssh-keys ssh-keygen

$ 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 

它似乎生成了(A)ll的密钥文件,但我在/root/.ssh/中看不到任何密钥。只是为了确认,我运行ssh-keygen没有任何选项,通过所有提示输入,我按预期获得了密钥。

所以问题是,“到底发生了什么?”

3 个答案:

答案 0 :(得分:1)

这在ssh-keygen手册中有记载:

  

-A

     

对于不存在主机密钥的每种密钥类型(rsa1,rsa,dsa,ecdsa和ed25519),生成具有默认密钥文件路径的主机密钥,为空            密码短语,密钥类型的默认位和默认注释。系统管理脚本使用它来生成新的主机密钥。

因此,如果您的系统还没有主机密钥,ssh-keygen -A将创建它们。 重新创建主机密钥会导致SSH客户端抱怨下次连接到计算机时主机的密钥指纹已经更改,并且...

Are you sure you want to continue connecting (yes/no)? 

(假设您之前已使用SSH成功​​连接到计算机)

答案 1 :(得分:0)

根据我的阅读,-A选项生成(A)ll默认主机密钥。

主机密钥 是用于在SSH协议中验证计算机的加密密钥。以下是ssh.com

的一个很好的解释

当我通过ssh-keygen提示输入时,在~/.ssh/文件夹中生成了一个密钥;正如我所料。但是,在运行ssh-keygen -A时,我在~/.ssh/中没有看到任何其他密钥。

在阅读ssh.com上的帖子后,我发现了/etc/ssh/中新出现的密钥。

<强>更新

根据原始问题的评论,查看@Biffen推荐的explainshell.com/explain?cmd=ssh-keygen+-A文档!

答案 2 :(得分:0)

我怀疑问题的一部分是ssh-keygen -A存储结果的地方,我试图问自己的一个问题,并且认为我已经回答了。

通过以普通用户身份运行“ssh-keygen -A”命令(NOT ROOT),您可以非常快速地查看结果存储在系统中的位置:然后权限将阻止您实际重写任何内容:

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