Bitbucket Git仓库配置SSH密钥

Git仓库通过密钥对SSH访问进行鉴权处理,以防止中间人攻击。

以Bitbucket Git仓库为例,基于Windows系统来演示,Git配置SSH密钥的方法。

在Windows上创建SSH密钥,密钥默认保存在/Users/<username>/.ssh 目录下。

使用默认值生成SSH密钥

在命令行中输入:

ssh-keygen

如果提示没有此命令,需下载git程序进行安装。

该命令会询问要将密钥保存在哪个文件上,默认保存在c/Users/emmap1/.ssh/id_rsa文件中。通常直接回车即可。

也可以指定密钥文件名称

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

或者,使用RSA算法:

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

按提示回车确认后,再按提示输入密码。

创建SSH密钥过程

ssh-keygen

查看.ssh目录下的密钥

$ dir .ssh 
id_rsa id_rsa.pub

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

将公钥添加到Git远程仓库

复制公钥

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左下方的头像中栏选择Bitbucket设置。将 打开“  帐户设置”页面。

单击SSH密钥,此页面会显示已添加的密钥,打开.ssh/id_rsa.pub文件,并复制公钥内容。最后一行看是一个电子邮件地址,添加公钥时是否包含电子邮件地址无关紧要。

为Git配置SSH密钥

点击“保存”,Bitbucket会向你发送电子邮件以确认密钥添加完成。 

测试密钥添加是否成功

首次通过SSH连接到时,系统会要求验证要连接真实性。例如,在连接到bitbucket.com时,确认是否将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密钥对

将密钥添加到ssh-agent

如果使用的密钥对非默认路径,则必须配置SSH客户端,打开终端并使用以下命令(替换other_id_rsa为实际私有SSH密钥):

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

要保存这些设置,需要将它们保存到配置文件中。对于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

每个仓库使用不同的SSH密钥

如果需要每个仓库使用不同的密钥,这不会使用SSH代理,至少需要Git 2.10。可以在仓库中发出以下命令:

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

部署密钥

部署密钥允许使用单个SSH密钥对,对一个或多个项目进行读/写访问。对于将仓库克隆到Continuous Integration(CI)服务器非常有用。通过使用部署密钥,而不必设置虚拟用户帐户。

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

为新部署密钥指定标题并粘贴公共SSH密钥。在此之后,使用相应私有SSH密钥的计算机,具有对项目的读/写访问权限。

如果要将相同的密钥添加到另一个项目,在“从可用的项目中部署密钥”列表中启用它。所有项目的所有部署密钥都可用。该项目访问可以通过成为项目的成员或加入用户组来实现。