官网最新的SSH Key格式和生成方式是ed25519
,其比之前创建博客时使用的rsa
速度更快,也更加安全。
SSH很熟悉,之前Hexo博客部署时,使用SSH连接的方式,可以避免每次hexo d
时都要输入用户名和密码,SSH连接比较方便。
官网是如此说的,使用SSH协议,您可以连接到远程服务器和服务并对其进行身份验证。使用SSH密钥,您可以连接到GitHub,而无需在每次访问时提供您的用户名和个人访问令牌。您还可以使用SSH密钥对提交进行签名。
1. SSH常见key格式
1.1. 各种格式密钥的特点
之前使用的Key格式是RSA
,密钥文件名是id_rsa.pub
。常见的格式还有DSA
、ECDSA
等,特点如下。
- DSA 它是不安全的,OpenSSL从v7版本开始已放弃对其支持,如果你正在使用,请马上升级。
- RSA 安全性依赖于key的大小,3072位或4096位的key是安全的,小于此大小的key可能需要升级一下,1024位的key已经被认为不安全。
- ECDSA 安全性取决于你的计算机生成随机数的能力,该随机数将用于创建签名,ECDSA使用的NIST曲线也存在可信赖性问题。
- ed25519 是目前最推荐的公钥算法。
1.2. ed25519的优势
RSA
是目前使用最广泛的SSH key
格式,但同ed25519
相比,RSA
速度更慢,且当key小于2048位时是不安全的。
ed25519公钥
更为紧凑,仅68个字符。生成密钥和签名的过程都非常快,使用ed25519进行批量签名验证也很快。它是为防碰撞而设计的,防哈希冲突。
2. 检查现有 SSH 密钥
在生成新的SSH密钥之前,应该检查本地计算机是否存在现有密钥。
输入ls -al ~/.ssh
以查看是否存在现有的SSH密钥,这个命令的含义就是列出.ssh
目录中的文件(如果存在)。
ls -al ~/.ssh
默认情况下,GitHub的一个支持的公钥的文件名是以下之一。id_rsa.pub
id_ecdsa.pub
id_ed25519.pub
提示:如果收到错误,指示~/.ssh
不存在,则表明默认位置中没有现有的SSH密钥对。 您可以在下一步中创建新的SSH密钥对。
如果有现有的SSH密钥,则可以使用该密钥通过SSH对Git操作进行身份验证。没有则生成一个新的。如果不希望使用任何可用的密钥对,当然也可以生成新的SSH密钥。
3. 生成新的 SSH 密钥
3.1. 使用以下命令生成密钥
ssh-keygen -t ed25519 -C "你的GitHub注册邮箱"
这个命令含义就是以填写的的电子邮件地址为标签创建新SSH密钥。-t
表示创建的key
的类型,最新我们使用ed25519
,之前创建博客时采用的命令是ssh-keygen -t rsa -C "你的GitHub注册邮箱"
,生成的密钥格式便是rsa
的。
3.2. 选择保存位置
接下来提示您Enter a file in which to save the key
(输入要保存密钥的文件)”时,按Enter键
。这会接受默认文件位置。
> Enter a file in which to save the key (/Users/you/.ssh/id_algorithm): [Press enter]
3.3. 之后在提示符下,键入安全密码。
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
4. 将SSH密钥添加到ssh-agent
4.1. 在后台启动 ssh 代理。
eval "$(ssh-agent -s)"
4.2. 新建或修改~/.ssh/config文件
如果你使用的是macOS Sierra 10.12.2
或更高版本,则需要修改 ~/.ssh/config
文件以自动将密钥加载到ssh-agent
中并在密钥链中存储密码。
4.2.1. 首先,检查你的~/.ssh/config文件是否在默认位置。
open ~/.ssh/config
4.2.2. 如果文件不存在,请创建该文件。
touch ~/.ssh/config
4.2.3. 修改config文件
打开你的~/.ssh/config
文件,然后将下面的代码添加到文件中。 如果您的SSH密钥文件与示例代码具有不同的名称或路径,请修改文件名或路径以匹配您当前的设置。
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
4.3. 将SSH密钥添加到ssh-agent
将SSH私钥添加到ssh-agent
并将密码存储在密钥链中。 如果使用其他名称创建了密钥或要添加具有其他名称的现有密钥,请将命令中的d_ed25519
替换为私钥文件的名称。
ssh-add -K ~/.ssh/id_ed25519
5. 将SSH密钥添加到GitHub上的帐户
生成SSH密钥对后,您必须将公钥添加到GitHub.com才能为您的帐户启用 SSH 访问。这部分内容见之前的博客搭建文章6.3部分内容
6. 测试SSH连接有效性
这部分内容见之前的之前的博客搭建文章6.4部分内容