主机密钥
主机密钥通常在安装 SSH 服务器时自动生成。它们可以随时再生。
$ ls -l /etc/ssh/
total 548
-rw-r--r-- 1 root root 505426 Feb 26 2022 moduli
-rw-r--r-- 1 root root 1650 Feb 26 2022 ssh_config
drwxr-xr-x 2 root root 4096 Feb 26 2022 ssh_config.d
-rw------- 1 root root 1381 Apr 7 12:31 ssh_host_dsa_key
-rw-r--r-- 1 root root 607 Apr 7 12:31 ssh_host_dsa_key.pub
-rw------- 1 root root 513 Apr 7 12:31 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 179 Apr 7 12:31 ssh_host_ecdsa_key.pub
-rw------- 1 root root 411 Apr 7 12:31 ssh_host_ed25519_key
-rw-r--r-- 1 root root 99 Apr 7 12:31 ssh_host_ed25519_key.pub
-rw------- 1 root root 2602 Apr 7 12:31 ssh_host_rsa_key
-rw-r--r-- 1 root root 571 Apr 7 12:31 ssh_host_rsa_key.pub
-rw-r--r-- 1 root root 342 Dec 8 2020 ssh_import_id
-rw-r--r-- 1 root root 3343 Apr 7 12:43 sshd_config
drwxr-xr-x 2 root root 4096 Mar 16 17:31 sshd_config.d
选择算法
SSH 支持多种用于身份验证密钥的公钥算法。这些包括:
- dsa
- ecdsa
- ecdsa-sk
- ed25519
- ed25519-sk
- rsa
命令和选项
-b “Bits” 此选项指定密钥中的位数。管理 SSH 用例的法规可能要求使用特定的密钥长度。通常,2048 位被认为足以用于 RSA 密钥。
-e “Export” 此选项允许在 OpenSSH 密钥文件格式和RFC 4716 “SSH 公钥文件格式”中记录的格式之间重新格式化现有密钥。
-p [-P old_passphrase] “Change the passphrase” 此选项允许使用和,更改私钥文件的密码[-N new_passphrase]。[-f keyfile]
-t “Type” 此选项指定要创建的密钥的类型。常用的值是: - RSA密钥的rsa - DSA密钥的dsa -椭圆曲线 DSA密钥的ecdsa
-i "Input" 当需要ssh-keygen访问现有密钥时,此选项指定文件。
-f "File" 指定要在其中存储创建的密钥的文件的名称。
-N "New" 为密钥提供新的密码。
-P "Passphrase" 在读取密钥时提供(旧)密码。
-c "Comment" 更改密钥文件的注释。
-p 更改私钥文件的密码。
-q 沉默 ssh-keygen。
-v 详细模式。
-l "Fingerprint" 打印指定公钥的指纹。
-B "Bubble babble" 显示密钥文件的“bubble babble”(Tectia 格式)指纹。
-F 在 known_hosts 文件中搜索指定的主机名。
-R 从 known_hosts 文件中删除属于主机名的所有密钥。
-y 读取私有 OpenSSH 格式文件并将 OpenSSH 公钥打印到标准输出。
生成密钥
rsa
$ ssh-keygen -t rsa -f .ssh/wgs_rsa -b 4096 -C "1304995320@qq.com"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in .ssh/wgs_rsa
Your public key has been saved in .ssh/wgs_rsa.pub
The key fingerprint is:
SHA256:iwJv0jlCU9n5axrtLbxTxQ7QwTJ0p6gv2wp2tklmkcg 1304995320@qq.com
The key's randomart image is:
+---[RSA 4096]----+
| ..oo.. |
| o .+ooo |
| o o .+.. |
| o . + . o |
| + E + S + |
| . = . = o. . |
| o X X.*. |
| = X @+. |
| *.++. |
+----[SHA256]-----+
dsa
$ ssh-keygen -t dsa -f .ssh/wgs_dsa -C "1304995320@qq.com"
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in .ssh/wgs_dsa
Your public key has been saved in .ssh/wgs_dsa.pub
The key fingerprint is:
SHA256:EOyAr/VMJkrorZ7HWX1gnhOy4TU+8FLufSqh4eU/bcQ 1304995320@qq.com
The key's randomart image is:
+---[DSA 1024]----+
| . .. |
| . . .. |
| . . o. |
|. . +++O |
|...+.*# S . |
| .o. *o% . E |
| o + B * o |
| ..+ o + o + |
|.o. oo= |
+----[SHA256]-----+
ecdsa
$ ssh-keygen -t ecdsa -f .ssh/wgs_ecdsa -b 521 -C "1304995320@qq.com"
Generating public/private ecdsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in .ssh/wgs_ecdsa
Your public key has been saved in .ssh/wgs_ecdsa.pub
The key fingerprint is:
SHA256:YZuu+9p1w0U09g3yvKW5o3ipnVtXO4iBba6hmUFdIx0 1304995320@qq.com
The key's randomart image is:
+---[ECDSA 521]---+
| E. = |
| . .* +.|
| o. + + +|
| ..+= .. = |
| .So + = .|
| .. o.o...o|
| ....o+o+o.|
| o=.o+o= o.|
| +Bo.oo=. |
+----[SHA256]-----+
ed25519
$ ssh-keygen -t ed25519 -f .ssh/wgs_ed25519 -C "1304995320@qq.com"
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in .ssh/wgs_ed25519
Your public key has been saved in .ssh/wgs_ed25519.pub
The key fingerprint is:
SHA256:BAB+mj3HLKUESR6blUhJFkxyMiqGvCIT/HS4ZviyLrM 1304995320@qq.com
The key's randomart image is:
+--[ED25519 256]--+
|+*%*oo. |
|=O=*o . |
|=+=oo.. . |
|o.=*o= . |
|+oo== + S |
|o.+ + |
| . . |
|o o |
|E= |
+----[SHA256]-----+
配置文件
# cat ~/.ssh/config
Host github.com
Hostname github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/wgs_dsa
Host gitlab.com
Hostname gitlab.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/wgs_ecdsa
Host gitee.com
Hostname gitee.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/wgs_ed25519
分发公钥
查看公钥
$ ls -l .ssh/
total 32
-rw------- 1 wgs wgs 0 Oct 12 18:11 authorized_keys
-rw------- 1 wgs wgs 1381 Apr 11 14:19 wgs_dsa
-rw-r--r-- 1 wgs wgs 607 Apr 11 14:19 wgs_dsa.pub
-rw------- 1 wgs wgs 736 Apr 11 14:22 wgs_ecdsa
-rw-r--r-- 1 wgs wgs 271 Apr 11 14:22 wgs_ecdsa.pub
-rw------- 1 wgs wgs 411 Apr 11 14:25 wgs_ed25519
-rw-r--r-- 1 wgs wgs 99 Apr 11 14:25 wgs_ed25519.pub
-rw------- 1 wgs wgs 3381 Apr 11 14:18 wgs_rsa
-rw-r--r-- 1 wgs wgs 743 Apr 11 14:18 wgs_rsa.pub
复制公钥
ssh-copy-id -i ~/.ssh/wgs_ed25519.pub user@host
参考文档
https://man.openbsd.org/ssh-keygen.1