一、生成SSH密钥
- 安装之前可以先简单检查下
~目录下是否已安装过
$ cd ~
$ ls -al ~/.ssh
# 没安装过会看到以下提示
ls: /Users/vitas/.ssh: No such file or directory
- 生成密钥文件
$ ssh-keygen -t ed25519 -C "mac ssh key" # 命令稍后会作解释
Generating public/private ed25519 key pair. # 正在生成公钥/私钥对
Enter file in which to save the key (/Users/vitas/.ssh/id_ed25519): # 询问密钥存放路径,直接回车即可
Created directory '/Users/vitas/.ssh'. # 自动创建了.ssh目录
Enter passphrase (empty for no passphrase): # 设置密码(空表示无密码),可直接回车表示不设置密码
Enter same passphrase again: # 再次输入密码或回车
# 成功之后会有以下提示信息
Your identification has been saved in /Users/vitas/.ssh/id_ed25519
Your public key has been saved in /Users/vitas/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:GqE2k/cGaLQh2D9zuJN8BGlP0Fmj/gr/JVpfRbrWCyI mac ssh key
The key's randomart image is:
+--[ED25519 256]--+
| .. oo |
| o oo. . |
|. o * + . |
| = % . o |
| # O S . . |
| + @ * + |
| * o E o = . |
| = = = + . . |
| +.. . . |
+----[SHA256]-----+
- 查看密钥文件
$ ls -al ~/.ssh
# 再次查看,可以看到存放公钥、私钥的文件已经生成
total 16
drwx------ 4 vitas staff 128 10 12 15:37 .
drwxr-x---+ 24 vitas staff 768 10 12 15:39 ..
-rw------- 1 vitas staff 399 10 12 15:37 id_ed25519 # 存放私钥
-rw-r--r-- 1 vitas staff 93 10 12 15:37 id_ed25519.pub # 存放公钥
- 查看公钥
$ cat .ssh/id_ed25519.pub
- 通过命令拷贝公钥内容
$ pbcopy < .ssh/id_ed25519.pub
二、ssh-keygen 命令
ssh-keygen 命令来自于英文词组“SSH key generate”的缩写,其功能是用于生成SSH密钥文件。
语法格式
$ ssh-keygen [参数]
常用参数
| 参数 | 说明 |
|---|---|
| -b | 指定密钥长度(不同算法支持的长度不同) |
| -f | 指定用来保存密钥的文件名 |
| -p | 更改密钥密码 |
| -t | 指定密钥类型(用来生成密钥的算法) |
| -C | 添加注释 |
示例
$ ssh-keygen -t rsa -C "your_email@example.com"
三、密钥类型
密钥的类型有很多种,比如dsa、rsa、 ecdsa、ed25519等.
- RSA(Rivest–Shamir–Adleman)是最早的公钥密码系统之一,被广泛用于安全数据传输。它的安全性取决于整数分解,因此永远不需要安全的RNG(随机数生成器)。与DSA相比,RSA的签名验证速度更快,但生成速度较慢。
- DSA(数字签名算法)是用于数字签名的联邦信息处理标准。它的安全性取决于离散的对数问题。与RSA相比,DSA的签名生成速度更快,但验证速度较慢。如果使用错误的数字生成器,可能会破坏安全性。
- ECDSA(椭圆曲线数字签名算法)是DSA(数字签名算法)的椭圆曲线实现。椭圆曲线密码术能够以较小的密钥提供与RSA相对相同的安全级别。它还具有DSA对不良RNG敏感的缺点。
- EdDSA(爱德华兹曲线数字签名算法)是一种使用基于扭曲爱德华兹曲线的Schnorr签名变体的数字签名方案。签名创建在EdDSA中是确定性的,其安全性是基于某些离散对数问题的难处理性,因此它比DSA和ECDSA更安全,后者要求每个签名都具有高质量的随机性。
- Ed25519是EdDSA签名方案,但使用SHA-512 / 256和Curve25519;它是一条安全的椭圆形曲线,比DSA,ECDSA和EdDSA 提供更好的安全性,并且具有更好的性能。
其他说明
- RSA密钥使用最广泛,因此似乎得到最好的支持。
- ECDSA(在OpenSSH v5.7中引入)在计算上比DSA轻,但是除非您有一台处理能力非常低的机器,否则差异并不明显。
- 从OpenSSH 7.0开始,默认情况下SSH不再支持DSA密钥(ssh-dss)。根据SSH标准(RFC 4251及更高版本),DSA密钥可用于任何地方。
- Ed25519在openSSH 6.5中引入。
总结
- ssh key的类型有四种,分别是dsa、rsa、 ecdsa、ed25519。
- 根据数学特性,这四种类型又可以分为两大类,dsa/rsa是一类,ecdsa/ed25519是一类,后者算法更先进。
- dsa因为安全问题,已不再使用了。
- ecdsa因为政治原因和技术原因,也不推荐使用。
- rsa是目前兼容性最好的,应用最广泛的key类型,在用ssh-keygen工具生成key的时候,默认使用的也是这种类型。不过在生成key时,如果指定的key size太小的话,也是有安全问题的,推荐key size是3072或更大。
- ed25519是目前最安全、加解密速度最快的key类型,由于其数学特性,它的key的长度比rsa小很多,优先推荐使用。它目前唯一的问题就是兼容性,即在旧版本的ssh工具集中可能无法使用。不过据我目前测试,还没有发现此类问题。
结论
优先选择ed25519,否则选择rsa
附实例图
参考博文
https://blog.csdn.net/zhw21w/article/details/124183646
https://www.cnblogs.com/librarookie/p/15389876.html