Git多平台ssh key
Git 多平台 ssh key
SSH 基础
密码口令登录
- 客户端连接上服务器之后,服务器把自己的公钥传给客户端
- 客户端输入服务器密码通过公钥加密之后传给服务器
- 服务器根据自己的私钥解密登录密码,如果正确那么就让客户端登录
公钥登录
公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用 RSA 加密方案,主要流程包含:
- 客户端生成 RSA 公钥和私钥
- 客户端将自己的公钥存放到服务器
- 客户端请求连接服务器,服务器将一个随机字符串发送给客户端
- 客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
- 服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了
仓库 Deploy keys 和账户 SSH Keys 的区别
- Github 账户中的 SSH keys,相当于这个账号的最高级 key,只要是这个账号有的权限(任何项目),都能进行操作
- 仓库的 Deploy keys,就是这个仓库专有的 key,用这个 key,只能操作这个项目,其他项目没有权限。
Git 的.ssh 文件夹内容介绍
id_rsa 与 id_rsa.pub
公钥和私钥文件,id_rsa.pub 是公钥,配置到各个 Git 平台的 SSH keys 中。id_rsa 可以称之为私有密钥,id_rsa.pub 可以称之为公有密钥。我们会把公有密钥交给服务端,当需要从服务端请求内容的时候,要带上私有密钥。此时,服务器会通过一定的算法计算私有密钥,并判断计算的结果是否与公有密钥一样,如果不一样则响应请求失败。
config 文件
config 文件主要在配置多个 git 账户时使用的,里面主要配置了访问不同的主机 (Host) 时采用不同的密钥。
文件内容例如:
Host git.moumentei.com
User git
Hostname git.moumentei.com
IdentityFile ~/.ssh/id_ed25519
Host github.com
User git
Hostname github.com
IdentityFile ~/.ssh/id_rsa
Host gitee.com
User git
Hostname gitee.com
IdentityFile ~/.ssh/id_ed25519_gitee
known_hosts 文件
当我们成功与服务端进行连接时,ssh 会记录服务端的 Host、IP 以及 rsa 文件
gitee.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEKxHSJ7084RmkJ4YdEi5tngynE8aZe2uExxx
git.moumentei.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILQaptBrxxxxH+QM6SrUi9qVzXBdNdXX7roBcgithub.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVxxxoqKLsabgH5C9okWi0dh2l9GKJl
github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2xxxbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTxxxNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=
github.com ssh-ed25519 AAAAC3NzaC1lZDxxxMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl
git.moumentei.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILQaptBrtxxxQM6SrUi9qVzXBdNdXX7roBc
快速配置 SSH keys
- 安装 git 程序
- 在 Git Bash 生成 RSA 或 Ed25519 密钥对
# 生成ed25519密钥对
ssh-keygen -t ed25519 -C "shengfanzeng@gmail.com"
# 生成RSA秘钥对
# 注:如果您使用的是不支持 Ed25519 算法的旧系统,请使用以下命令:
ssh-keygen -t rsa -b 4096 -C "shengfanzeng@gmail.com"
# 如果需要变更生成的名字,在第一步骤输入对应的名字即可如:id_ed25519_syscore
- 多个平台配置 config,改对应的 IdentityFile 路径即可
Host gxatek.com
User git
Hostname gxatek.com
IdentityFile ~/.ssh/id_ed25519_syncore
Host git.moumentei.com
User git
Hostname git.moumentei.com
IdentityFile ~/.ssh/id_ed25519
Host github.com
User git
Hostname github.com
IdentityFile ~/.ssh/id_rsa
Host gitee.com
User git
Hostname gitee.com
IdentityFile ~/.ssh/id_ed25519_gitee
- 测试
ssh -T github.com
ssh -T git@gitlab.com
ssh -T gitee.com
Github 添加 Deploy key 和 SSH key
配置 user.name 和 user.email
git config --global user.name "gitHub上注册的用户名"
git config --global user.email “gitHub上注册时用的邮箱”
配置完成后,可以使用 git config --global --list 命令查看是否配置成功。
生成新 SSH 密钥 (RSA 和 Ed25519)
- Ed25519
ssh-keygen -t ed25519 -C "shengfanzeng@gmail.com"
- RSA
# 注:如果您使用的是不支持 Ed25519 算法的旧系统,请使用以下命令:
ssh-keygen -t rsa -b 4096 -C "shengfanzeng@gmail.com"
会出现以下内容,直接敲 3 次回车:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/c/Users/hacket/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/hacket/.ssh/id_ed25519
Your public key has been saved in /c/Users/hacket/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:eYis1ywBJIyfpKqJoEf498jrypsGhzWJ+J/KkS0mhoQ shengfanzeng@gmail.com
The key's randomart image is:
+--[ED25519 256]--+
| o. . |
|. oo |
|.= o. |
|= * o . o |
|E* . + S . |
|O +o . + . |
|BB=.o.o o |
|*=+=+o . |
| oB*=o. |
+----[SHA256]-----+
默认生成在~./.ssh/目录,文件 id_ed25519 和 id_ed25519.pub
将 SSH 密钥添加到 ssh-agent(如果需要)
确保 ssh-agent 是可用的。ssh-agent 是一种控制用来保存公钥身份验证所使用的私钥的程序,其实 ssh-agent 就是一个密钥管理器,运行 ssh-agent 以后,使用 ssh-add 将私钥交给 ssh-agent 保管,其他程序需要身份验证的时候可以将验证申请交给 ssh-agent 来完成整个认证过程。
eval "$(ssh-agent -s)"
中间可能需要:
ssh-agent bash
将私钥交给 ssh-agent 管理:
ssh-add ~/.ssh/id_ed25519
将 SSH 公钥复制到剪贴板
clip < ~/.ssh/id_ed25519.pub
将公钥添加到 GitHub 管理平台
Mac 下打开终端,输入 open ~/.ssh,进入.ssh 文件夹
查看 id_rsa.pub(公钥)这个文件,打开复制里面的内容
添加仓库的 Deploy keys
- 找到一个 Repository 的 Settings
- 找到 Deploy keys,添加一个 deploy key
- title 随便写,用来标识 key 的来源,然后把刚才复制的内容 (公钥) 直接粘贴到 key 里面,不要敲任何其他的按钮,点选 Allow write access。然后点击 add key。创建完成 SSH 的 Key 了。

添加账户的 SSH Keys
- 页面右上角头像点击 Settings,进入账户设置中心
- 选择左侧的 SSH and GPG keys,点击 New SSH key 添加 key
- 其他操作同添加 Deploy keys
测试
测试ssh -T git@xxx(其中 xxx 为主机名)
在 Are you sure you want to continue connecting (yes/no/[fingerprint])? 选择的时候选 yes 不能按 enter,不然会测试不通过。
$ ssh -T git@git.gxatek.com
The authenticity of host 'git.gxatek.com (10.103.106.14)' can't be established.
ED25519 key fingerprint is SHA256:RCkEUtOACSLGzMYEcxxxmoYi47iMYAek.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'git.gxatek.com' (ED25519) to the list of known hosts.
Welcome to GitLab, @fszeng!
Github 测试
ssh -T github.com

Gitlab 测试
ssh -T git@gitlab.com
# 公司的Gitlab
ssh -T git@git.moumentei.com
Gitee 测试
ssh -T gitee.com
Coding.net(前身 gitcafe)
ssh -T git@git.coding.net

快速生成多个平台 SSH Key,且让他们之间能共存
- 生成 ssh key 到指定位置,并支持重命名
# 生成到默认位置默认名字
ssh-keygen -t ed25519 -C "fszeng@syscore.space"
# 指定位置指定名字
ssh-keygen -t ed25519 -C "fszeng@syscore.space" -f ~/.ssh/id_ed25519_github
- 在
~/.ssh/config文件添加内容,没有 config 新建 config 文件
Host gxatek.com
User git
Hostname gxatek.com
IdentityFile ~/.ssh/id_ed25519
Host git.moumentei.com
User git
Hostname git.moumentei.com
IdentityFile ~/.ssh/id_ed25519
Host github.com
User git
Hostname github.com
IdentityFile ~/.ssh/id_rsa
Host gitee.com
User git
Hostname gitee.com
IdentityFile ~/.ssh/id_ed25519_gitee
- 测试,第一天连接可能需要添加到 known_hosts,需要输入 yes,否则测试不成功
ssh -T git@git.moumentei.com
ssh -T gitgxatek.com
ssh -T github.com
ssh -T gitee.com
GPG
- 下载 Windows64 位
https://gpg4win.org/download.html - 命令行下创建 GPG 密钥,填写用户名、邮箱和密码
gpg --full-generate-key

- 牢记这个密码,后续还用得到
pub rsa3072 2022-11-15 [SC]
71605C636B524EB7A8A98648B0D7165B00581DF6
uid hacket (good gpg) <shengfanzeng@gmail.com>
sub rsa3072 2022-11-15 [E]
- 把这个 key 上传到 GPG 服务器 (命令中最后的 00581DF6 这个字符串替换成你刚刚申请的密码的后 8 位)
gpg --keyserver hkp://keyserver.ubuntu.com --send-keys 00581DF6

- 查询命令查询一下,只有能查询到的 key 才能是认为上传成功的。
gpg --keyserver hkp://keyserver.ubuntu.com --search-keys 00581DF6

- 导出这个私钥以便在上传时使用 -o 后面指定输出文件的路径
gpg -o c:/Users/hacket/desktop/secret.gpg --export-secret-keys 00581DF6
- 可以将这个
secret.gpg文件放在工程中,注意在上传时记得忽略
具体见附件secrte.gpg