Git仓库ssh密钥配置

Git仓库使用密钥执行鉴权,ssh方式能防止中间人攻击,以bitbucket为例演示git仓库密钥配置。

生成密钥

命令如下:

ssh-keygen

若提示无此命令,下载git安装即可。

命令询问将密钥保存在哪,默认存储在c/Users/userName/.ssh/id_rsa文件。

ssh-keygen -t ed25519 -C "nick@xieyonghui.com"

可选算法,如:RSA:

ssh-keygen -o -t rsa -b 4096 -C "nick@xieyonghui.com"

ssh-keygen

密钥

$ dir .ssh 
id_rsa id_rsa.pub

默认:公钥文件:id_rsa.pub,私钥文件:id_rsa。

添加公钥

复制公钥。

Windows Git Bash

cat ~/.ssh/id_ed25519.pub | clip

WSL/GNU/Linux(需要xclip包)

xclip -sel clip < ~/.ssh/id_ed25519.pub

macOS

pbcopy < ~/.ssh/id_ed25519.pub

将公钥添加到Bitbucket

Bitbucket设置中, 打开“  帐户设置”页面。

点击SSH密钥,列出已添加的密钥,可添加/修改。

复制.ssh/id_rsa.pub文件内容并粘贴。

为Git配置SSH密钥

点击“保存”,Bitbucket会发送电子邮件告知密钥添加完成。 

注:公钥内容最后一行可能是一个电子邮件,将公钥添加到git远程仓库时是否包含电子邮件无关紧要。

验证配置

首次连接到时系统要求验证连接真实,询问是否将Bitbucket.com添加到可信主机列表中:

ssh -T git@bitbucket.com

提示如下:

The authenticity of host 'bitbucket.com (18.205.93.5)' can't be established.
RSA key fingerprint is SHA256:zzXQOXSRBEiUtuE8AikJYKwbHaxvSc0ojez9YXaGp1A.
Are you sure you want to continue connecting (yes/no)?

若没有出现欢迎信息,在SSH命令中使用-vvvT了解问题:

ssh -T -vvvT git@bitbucket.com

配置客户端

将密钥添加到ssh-agent,若密钥未存放在默认路径下,须配置SSH客户端,打开终端并使用如下命令:

eval $(ssh-agent -s)
ssh-add ~/.ssh/other_id_rsa

注:替换other_id_rsa为实际私有SSH密钥。

将配置保存到文件中,对于OpenSSH客户端,位于~/.ssh/config文件中。

在文件中配置多个主机,如:Bitbucket、GitLab.com、GitHub等。

# GitLab.com
Host gitlab.com
  Preferredauthentications publickey
  IdentityFile ~/.ssh/gitlab_com_rsa

# Private GitLab instance
Host gitlab.company.com
  Preferredauthentications publickey
  IdentityFile ~/.ssh/example_com_rsa

仓库密钥

若为每个仓库配置不同密钥,在仓库中发出如下命令:

git config core.sshCommand "ssh -o IdentitiesOnly=yes -i ~/.ssh/private-key-filename-for-this-repository -F /dev/null"

注:git 2.10版本

部署用密钥

部署密钥功能允许使用单个SSH密钥对,对一或多个项目执行读/写访问。

将仓库克隆到Continuous Integration(CI)服务器非常有用。

使用部署密钥,不必设置虚拟用户帐户。

若是项目维护者或所有者,可展开“ 部署密钥”部分,在项目“设置”>“存储库”页面中添加部署密钥。

为新部署密钥指定标题并粘贴ssh公钥。

之后,拥有对应ssh私钥的计算机,对项目拥有读/写访问权限。

若将相同密钥添加到另一个项目,在“从可用项目部署密钥”列表中启用它。