SSH密钥对的生成方式有很多种,在此介绍Windows操作系统和Linux操作系统下常见的几种方式。我们需要注意,SSH的公钥格式有三种,分别为SSH1、SSH2-IETF SECSH和SSH2-OpenSSH。
1、Putty(puttygen.exe)
目前Windows平台下Putty已经逐步被XShell取代了,Putty生成的公钥为IETF类型,在此不再赘述:

使用puttygen生成SSH密钥对
2、ssh-keygen
Linux系统下可以使用OpenSSH的ssh-keygen生成密钥对:

使用ssh-keygen生成SSH密钥对
ssh-keygen任何参数都不加时就是生成密钥对,默认生成的秘钥类型为RSA类型,其中id_rsa.pub是公钥、id_rsa是私钥。ssh-keygen还可以生成其他类型的密钥,也还有其他参数可以查看密钥指纹等信息,在此不再赘述。除了不带任何参数外,常用的命令还有:
1 |
ssh-keygen -C "username@example" -t rsa -b 2048 -f username |
其中,-C是公钥文件中的注释,用于区分不同的密钥;-t和-b分别指定要生成密钥类型和密钥长度;-f指定生成的密钥对文件名,上例中生成的公钥文件名为username.pub,私钥为username。
3、XShell
以XShell6为例,通过“工具-用户密钥管理者-生成-新建用户密钥生成向导”可以方便地生成密钥对:

使用Xshell生成SSH密钥对1
XShell以图形化的方式可以非常方便选择要使用的密钥类型和密钥长度。

使用Xshell生成SSH密钥对2
在生成密钥时,可以使用密码保护私钥:

使用Xshell生成SSH密钥对3
使用密码保护私钥的重要性在于:无论密钥对非对称加密的安全性有多高,其最终效果依然取决于私钥是否会被非法窃取。如果使用了密码保护私钥,那么即使受密码保护的私钥落入未授权的用户手中,他们依然无法在不知道密码的情况下使用该私钥。当然,使用密码保护私钥的缺点在于在每次使用时都需要手动输入私钥密码。如果不使用密码保护私钥会收到提示:

使用Xshell生成SSH密钥对4
公钥的格式也可以选择:

使用Xshell生成SSH密钥对5
通过“用户密钥管理者”,我们也可以导入已有的密钥对和管理密钥,包括导出密钥对、查看和保存公钥等等:

使用Xshell管理SSH密钥对