本文最后更新于 272 天前,其中的信息可能已经有所发展或是发生改变。
内容目录
教程仅详细说明如何创建密钥,至于如何将密钥上传至 Git 托管平台请查阅对应平台的帮助文档。
创建密钥
创建密钥推荐在 Linux 上操作,例如 Debian 等,因为其自带相关工具不用额外操作。
密钥创建命令:
ssh-keygen -t ed25519 -C "your_email@example.com"
-t
:这个是密钥格式,一般来讲可以用ed25519
,部分老平台可能不支持这个算法,此时可以换成rsa
。-C
:此参数实际作用为添加注解,用于区分不同密钥,简单来讲就是取个名字。
创建过程:
madray@NAS:~$ ssh-keygen -t ed25519 -C "your_email@example.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/madray/.ssh/id_ed25519): # 这个是密钥保存路径,可以换个路径,括号内的是默认路径
Enter passphrase (empty for no passphrase): # 留空即可,直接回车
Enter same passphrase again: # 留空即可,直接回车
Your identification has been saved in /home/madray/.ssh/id_ed25519
Your public key has been saved in /home/madray/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:... your_email@example.com
The key's randomart image is:
+--[ED25519 256]--+
...
+----[SHA256]-----+
假设这里没有更换密钥保存路径,即 /home/madray/.ssh/id_ed25519
,那么生成完成之后,在 /home/madray/.ssh
目录下会生成两个文件:
id_ed25519
:这个是私钥文件,下载下来妥善保存,可以任意修改文件名。id_ed25519.pub
:这个是公钥文件,内容用于上传到 Git 托管平台。
本地配置 SSH
创建完 SSH 密钥之后,就需要保存到本地然后应用了,这里介绍一种可以配置多个 Git 托管平台使用不同密钥的方法。
首先创建目录 ~/.ssh
(Windows 下是类似 C:Usersxxx.ssh
的目录),然后创建文件 .config
:
# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_ed25519
Port 22
# github
Host github.com
HostName ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_ed25519
Port 443
# gitlab
Host gitlab.sgpublic.xyz
HostName gitlab.sgpublic.xyz
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_ed25519
Port 14022
其中对于每个小节的解释如下:
- Host:Git 仓库连接中的主机域名,例如
git@github.com:user/repo
中 Host 为github.com
。 - HostName:设置此 Host 实际连接时使用的主机域名,默认使用 Host。例如上面配置文件中 github 部分,配置
github.com
实际连接的时候使用域名ssh.github.com
且端口设置使用 443,则可以在代理软件仅代理常用端口时让连接走代理。 - PreferredAuthentications:首选认证方式,此处固定配置为
publickey
。 - IdentityFile:就是所使用的私钥文件了,就是前文中生成的私钥文件。如上所示的示例配置文件中虽然使用类似
~/.ssh
这种类 Unix 才能使用的路径,但在 Windows 中也是适用的。 - Port:设置实际链接时使用的端口,默认为 22。
如此就完成了不同 Git 托管平台使用不同密钥了。
测试配置
使用以下命令测试(示例为测试 github.com
连接性,用户名为 git
):
C:Userssgpub>ssh -T git@github.com
Hi sgpublic! You've successfully authenticated, but GitHub does not provide shell access.
关于用户名是什么的问题,具体取决于 Git 托管平台,常规来讲例如 github.com
和 gitee.com
等使用的是 git
。