目前有两个主流的密钥格式:OpenSSH格式的密钥 和 PuTTY格式的密钥,今天尝试使用PuTTY生成密钥。
1. 安装putty
% brew install putty
Running `brew update --auto-update`...
==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
https://github.com/Homebrew/brew#donations
==> Downloading https://formulae.brew.sh/api/formula.jws.json
######################################################################## 100.0%
==> Downloading https://formulae.brew.sh/api/cask.jws.json
######################################################################## 100.0%
==> Fetching putty
==> Downloading https://ghcr.io/v2/homebrew/core/putty/manifests/0.78
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/putty/blobs/sha256:98350a82ed60a6d22d3ef1fad8dc3a5e2ce8d44f2fea51d6f853315fed7b2a9e
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:98350a82ed60a6d22d3ef1fad8dc3a5e2ce8d44f2fea51d6f853315fed7b2
######################################################################## 100.0%
==> Pouring putty--0.78.arm64_monterey.bottle.tar.gz
🍺 /opt/homebrew/Cellar/putty/0.78: 17 files, 3.7MB
==> Running `brew cleanup putty`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
2. 查看puttygen命令的帮助文档
% man puttygen
2.1 输出文件格式
-O output-type
Specify the type of output you want puttygen to produce. Acceptable options are:
private
Save the private key in a format usable by PuTTY. This will either be the standard SSH-1 key format, or
PuTTY's own SSH-2 key format (`PPK'). This is the default.
public Save the public key only. For SSH-1 keys, the standard public key format will be used (`1024 37 5698745...').
For SSH-2 keys, the public key will be output in the format specified by RFC 4716, which is a multi-line text
file beginning with the line `---- BEGIN SSH2 PUBLIC KEY ----'.
public-openssh
Save the public key only, in a format usable by OpenSSH. For SSH-1 keys, this output format behaves
identically to public. For SSH-2 keys, the public key will be output in the OpenSSH format, which is a single
line (`ssh-rsa AAAAB3NzaC1yc2...').
fingerprint
Print a fingerprint of the public key. The -E option lets you specify which fingerprinting algorithm to use.
All algorithms are believed compatible with OpenSSH.
private-openssh
Save an SSH-2 private key in OpenSSH's format, using the oldest format available to maximise backward
compatibility. This option is not permitted for SSH-1 keys.
private-openssh-new
As private-openssh, except that it forces the use of OpenSSH's newer format even for RSA, DSA, and ECDSA keys.
private-sshcom
Save an SSH-2 private key in ssh.com's format. This option is not permitted for SSH-1 keys.
cert-info
Save a textual dump of information about the certificate on the key, if any: whether it's a host or a user
certificate, what host(s) or user(s) it's certified to be, its validity period, ID and serial number, and the
fingerprint of the signing CA.
text Save a textual dump of the numeric components comprising the key (both the public and private parts, if
present). Useful for debugging, or for using PuTTYgen as a key generator for applications other than SSH.
The output consists of a series of name=value lines, where each value is either a C-like string literal in
double quotes, a hexadecimal number starting with 0x..., or a binary blob encoded with base64, denoted by
b64("...").
If no output type is specified, the default is private.
2.2 命令示例
To generate an SSH-2 RSA key pair and save it in PuTTY's own format (you will be prompted for the passphrase):
puttygen -t rsa -C "my home key" -o mykey.ppk
To generate a larger (4096-bit) key:
puttygen -t rsa -b 4096 -C "my home key" -o mykey.ppk
To change the passphrase on a key (you will be prompted for the old and new passphrases):
puttygen -P mykey.ppk
To change the comment on a key:
puttygen -C "new comment" mykey.ppk
To convert a key into OpenSSH's private key format:
puttygen mykey.ppk -O private-openssh -o my-openssh-key
To convert a key from another format (puttygen will automatically detect the input key type):
puttygen my-ssh.com-key -o mykey.ppk
To display the SHA-256 fingerprint of a key (some key types require a passphrase to extract even this much information):
puttygen -l mykey.ppk
To add the OpenSSH-format public half of a key to your authorised keys file:
puttygen -L mykey.ppk >> $HOME/.ssh/authorized_keys
3. 小试牛刀
3.1 生成一个密钥对
使用puttygen命令生成密钥长度为4096的key,不不设置密码。
% puttygen -t rsa -b 4096 -C "my home key" -o mykey.ppk
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Enter passphrase to save key:
Re-enter passphrase to verify:
在当前目录下会生成一个名称为mykey.ppk的文件,文件内容如下,可以看到生成的文件中同时包含了公钥和私钥。
PuTTY-User-Key-File-3: ssh-rsa
Encryption: none
Comment: my home key
Public-Lines: 12
AAAAB3NzaC1yc2EAAAADAQABAAACAQCN/YEYn2s8sMv006ceGcAwQVgAUY2fbkwr
yc/tqH9Y4CDSG3i9DQdnUyZz1CwT7C50a/2Dmx+Ft8TxCpmMX+gQmUXWtyM3Yyfa
fXWQhbNfSN9RWDm3jicrNcIdSqZFkWpSmlvly1ogdVvsW750SI7ZmpVMZbhz61aC
13/qoExoEahIDAx0iqDQDnS1ANLLUQoVq7bXEY+5u0s9TY/DXynr9qwsW3szvbmG
qQyJq/jbdMLutywKrH0Srd3+rSKhAXUNcqOmxGN3y7iMHuT1ZW5jQlgY/cX8yI7S
MccHH0++KOEODKo+EutAEcOVDEbshGrZ6v5tb3xwGKnkTCpSO/cnNbYSjVr7rs7L
RUOLb3LV+7W0awb7MaaAh1JPwLB21zbBxRBltyRzJbqmK6Tfqm7kPd5CtnKN9NYV
Gc+sXYdFtT22hMr4Drdz64cBNiSZvDcJj+OxuQU/3craruh2nwkj1n1lBP77EFd6
4rujufvm/I39JLBqOWm0FpWLJrxvjbNOeUEvoOZ7ho5zyelSC+EO1Hj3kKL5+LKm
VgiFtm+GJt7d0Js0a5r5LbeAuukc5l/HnhFSDhR7BkXilkdH/v03GvM6sFXibAAh
M5TYG4VBkFGDnggBjcna9Q7plEMwR2oHo0w6Z60RjxKwQd9sP3lwHxfyhX3/810O
i20UJhg9ew==
Private-Lines: 28
AAACAHvQnw4VlbFqia+IEKZS1iA+GrrMYq6vw4Q7izE2STX62yPcCMDx547WFyXR
0k3dGfUzZfGpByfXQ8jc8WBTEU3IGfpN4EugD1SbKjVIIU3pgbKxOEMzljw7uHVK
bwsi7o/xQklztbewHuRQbBeCXe6quZ3Q5bNPeDTILicuePIW06NfvkyxxeEneeWM
PkRE+oJDJkEMc0QGammehMpc5XV5uFFFxH0t5+Xg66nxaCQWARWgbKsyFi5/pqE5
4IR9fNCpMsNtZT9FSjwFhKnoNQYhCCliwY7YZJIuDdvMFgFALF/P83QFk1ZfJymF
dyMvpO052XscSGqHVz5YnF7xI2aYntVG7knKSCiIKtkXnY6SzKt3PIo+Kc2BKyye
3QvP+yTUrrYsO46EfEC3/GP5trlYJQccYzKSPo7riEh1/pWyOGO0IEOQ4cwRph1T
rQKi++OzeSQ5seDcAPRGpMSJIMrGmhRUtZnKXeJbEumQLk03JRjGSqMvmajV1yo6
ftGPcnWAUA6F+TgzxV0BhVYn2R7q9uWSO819JoAPUxhX0KVIQQ14tpx2nagUZTkT
u08QZfZgVvpyhl2w3EzcEx2Y9HhSgrF+y2DJVit0RffDukkMBJjcQISKRlUHCUkT
A+gUUiZgH4GBMOzQ7fP32OtepFMe9sVYBSH78iBk8GwLClMhAAABAQD6c7v4Le6P
Qso8eLPc35PfnR01p2UpGC2tbT+px7jdBq9m/FQSPax4GBAOjVjTbASXr/r3VuQF
sIa/huLNdotWFFEp6EV9QRpjscnRceGzzFtO1hcLq/Yy0pYEKlJhEySquTDySQMd
nlfSDJSyNDm255R6xAYeJ4MdJuAH9osIkTzEc3nyMuO/GzCkcEBhphUKy4XpJRjb
MdFEglA4HplTXmjVD9/5ajr4SaKh2K3Np70fohvVsYw+uY7nrW3UEoMqbabCYycb
DIJKFQYnB4ytP9sPrEtb8kMhrzdYRwVSHiSb5noGv8RA4hw2rL6Jk454J9nod6n1
nvPsM8GFJvJlAAABAQCRIrQpnSU9I6urcLmQ7sshS7g27qhjPZ7mwdPI9OokOp8+
HTHLYeYf9b1/R5oXvP8C6m05tpdBujzVIuhtCgcl/iHfP7IB8qUz0lqhfBfg3AnN
UINH69lGebEFcOGTv4sQAcsvLKqqkTq/vaQ0fKoKT9hw/9NsY6Sam7Jw/u033nDg
VpftxoFE6GQsyoJwH9EmBVA2p0o8984SdbUmHgzFSDQTBFhrHv3hp6XUc/VFUCxw
XMd6VyQ3ME7qACQLeovFZYos2xA6btL0PnQlCmqNG2uFso7+ou8eMM2l6gVBwxqM
PGgORscESCw8BYcZL2SH+/4ZfiEXXYpPu/qwCYJfAAABACnOCkgNU4Es84MNbNau
MgdYcfhM/GjdCNe9jCKQ0VlMa7I9OG8cQYK/TOwfiiMjRK9nrBhlA/CsLyiUQwja
FlwbMcJGD+mztd11g/r/TdOc0Gw5Zl3fDgr+P/IWbti7h3IkE39ht0CkvHxIFheC
w0O7tiBCi4CY+8YiA9NwXqt2IFCTry337Qu7E+hEvLRazy9v16ug7T6bm0b9Iabq
hbgAX8aqgA9lnEiA9O6KucRcwIZP5OI7RBHPrLFYveCtVtjAaAXaph9t4NBjUzQO
P3A3CVFr3HMUrDyOZgrHjCAiy5qAS0waeCAjIpMeZaaCCyz/0ssH5KscWfqK/Qt/
3sA=
Private-MAC: 6ab56fb4defb75498b4c45ba4b3b9d7753edbc74d765d457029317703170da6c
3.2 导出私钥
% puttygen mykey.ppk -O private-openssh -o my-openssh-key
查看生成的私钥
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
3.3 导出公钥
% puttygen mykey.ppk -O public -o my-public
查看生成的公钥
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "my home key"
AAAAB3NzaC1yc2EAAAADAQABAAACAQCN/YEYn2s8sMv006ceGcAwQVgAUY2fbkwr
yc/tqH9Y4CDSG3i9DQdnUyZz1CwT7C50a/2Dmx+Ft8TxCpmMX+gQmUXWtyM3Yyfa
fXWQhbNfSN9RWDm3jicrNcIdSqZFkWpSmlvly1ogdVvsW750SI7ZmpVMZbhz61aC
13/qoExoEahIDAx0iqDQDnS1ANLLUQoVq7bXEY+5u0s9TY/DXynr9qwsW3szvbmG
qQyJq/jbdMLutywKrH0Srd3+rSKhAXUNcqOmxGN3y7iMHuT1ZW5jQlgY/cX8yI7S
MccHH0++KOEODKo+EutAEcOVDEbshGrZ6v5tb3xwGKnkTCpSO/cnNbYSjVr7rs7L
RUOLb3LV+7W0awb7MaaAh1JPwLB21zbBxRBltyRzJbqmK6Tfqm7kPd5CtnKN9NYV
Gc+sXYdFtT22hMr4Drdz64cBNiSZvDcJj+OxuQU/3craruh2nwkj1n1lBP77EFd6
4rujufvm/I39JLBqOWm0FpWLJrxvjbNOeUEvoOZ7ho5zyelSC+EO1Hj3kKL5+LKm
VgiFtm+GJt7d0Js0a5r5LbeAuukc5l/HnhFSDhR7BkXilkdH/v03GvM6sFXibAAh
M5TYG4VBkFGDnggBjcna9Q7plEMwR2oHo0w6Z60RjxKwQd9sP3lwHxfyhX3/810O
i20UJhg9ew==
---- END SSH2 PUBLIC KEY ----
3.4 导出可供OpenSSH使用的公钥
% puttygen mykey.ppk -O public-openssh -o my-openssh-public
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCN/YEYn2s8sMv006ceGcAwQVgAUY2fbkwryc/tqH9Y4CDSG3i9DQdnUyZz1CwT7C50a/2Dmx+Ft8TxCpmMX+gQmUXWtyM3YyfafXWQhbNfSN9RWDm3jicrNcIdSqZFkWpSmlvly1ogdVvsW750SI7ZmpVMZbhz61aC13/qoExoEahIDAx0iqDQDnS1ANLLUQoVq7bXEY+5u0s9TY/DXynr9qwsW3szvbmGqQyJq/jbdMLutywKrH0Srd3+rSKhAXUNcqOmxGN3y7iMHuT1ZW5jQlgY/cX8yI7SMccHH0++KOEODKo+EutAEcOVDEbshGrZ6v5tb3xwGKnkTCpSO/cnNbYSjVr7rs7LRUOLb3LV+7W0awb7MaaAh1JPwLB21zbBxRBltyRzJbqmK6Tfqm7kPd5CtnKN9NYVGc+sXYdFtT22hMr4Drdz64cBNiSZvDcJj+OxuQU/3craruh2nwkj1n1lBP77EFd64rujufvm/I39JLBqOWm0FpWLJrxvjbNOeUEvoOZ7ho5zyelSC+EO1Hj3kKL5+LKmVgiFtm+GJt7d0Js0a5r5LbeAuukc5l/HnhFSDhR7BkXilkdH/v03GvM6sFXibAAhM5TYG4VBkFGDnggBjcna9Q7plEMwR2oHo0w6Z60RjxKwQd9sP3lwHxfyhX3/810Oi20UJhg9ew== my home key