`ssh-keygen -A` 究竟是做啥的?
Posted
技术标签:
【中文标题】`ssh-keygen -A` 究竟是做啥的?【英文标题】:What exactly does `ssh-keygen -A` do?`ssh-keygen -A` 究竟是做什么的? 【发布时间】:2018-08-05 15:19:45 【问题描述】:$ 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
,通过所有提示输入,并且按预期获得了密钥。
所以问题是,“到底发生了什么?”
【问题讨论】:
For each of the key types (rsa1, rsa, dsa, ecdsa and ed25519) for which host keys do not exist, generate the host keys....
@DavidC.Rankin 我想我不明白主机密钥的概念。所以也许你可以扩大你的答案/评论。谢谢!
没问题。主机密钥是系统将在使用 system 密钥而不是单个 的任何 (ssh, rsync, scp, etc..
) 事务中用于身份验证的“私有”(和“公共”)密钥对您将为非 root 用户生成的 user 密钥。您也可以通过这种方式为用户生成所有密钥,但我相信这更像是一个系统设置选项。 (它基本上是生成所有默认密钥,而不是一次一个选项)
这个问题更适合 StackExchange 站点 Super User 或 Unix & Linux。 (这不是“编程”,例如编码,相关)
explainshell.com/explain?cmd=ssh-keygen+-A
【参考方案1】:
这在ssh-keygen
手册中有记录:
-A
对于不存在主机密钥的每种密钥类型(rsa1、rsa、dsa、ecdsa 和 ed25519),使用默认密钥文件路径生成主机密钥,一个空的 密码短语、密钥类型的默认位和默认注释。系统管理脚本使用它来生成新的主机密钥。
因此,如果您的系统还没有主机密钥,ssh-keygen -A
将创建它们。 重新创建主机密钥将导致您的 SSH 客户端在您下次连接到计算机时抱怨主机的密钥指纹已更改,并且...
Are you sure you want to continue connecting (yes/no)?
(假设您之前已经通过 SSH 成功连接到机器)
【讨论】:
【参考方案2】:我怀疑被问到的部分问题是 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
【讨论】:
【参考方案3】:根据我的阅读,-A
选项会生成 (A)ll 个默认主机密钥。
主机密钥是用于在 SSH 协议中对计算机进行身份验证的加密密钥。这是来自ssh.com的一个很好的解释
当我通过ssh-keygen
提示按回车时,在~/.ssh/
文件夹中生成了一个密钥;正如我所期待的那样。但是,在运行ssh-keygen -A
时,我在~/.ssh/
中没有看到任何额外的键。
在阅读了来自 ssh.com 的帖子后,我发现新铸造的钥匙位于 /etc/ssh/
。
更新:
查看@Biffen 在原始问题的 cmets 中推荐的 explainshell.com/explain?cmd=ssh-keygen+-A 的文档!
【讨论】:
以上是关于`ssh-keygen -A` 究竟是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章
AVFoundation 的 AVAssetWriterInput 期望MediaDataInRealTime 属性究竟是做啥的?
Keras 的 ImageDataGenerator 中的剪切究竟是做啥的?