GitLab和SSH密钥

Git是一个分布式版本控制系统,这意味着您可以在本地工作,但您也可以将更改共享或“推送”到其他服务器。在将更改推送到GitLab服务器之前,您需要一个安全的通信通道来共享信息。

SSH协议提供此安全性,允许您在不提供用户名或密码的情况下对GitLab远程服务器进行身份验证。

有关SSH协议如何工作的更详细说明,我们建议您阅读DigitalOcean的这个精彩教程。

找到现有的SSH密钥对

在生成新的SSH密钥对之前,通过打开shell或Windows上的命令提示符并运行以下命令,检查您的系统是否已在默认位置具有一个密钥对:

Windows命令提示符:

type %userprofile%\.ssh\id_rsa.pub

Windows / GNU / Linux / macOS / PowerShell上的Git Bash: 

cat ~/.ssh/id_rsa.pub

如果您看到以ssh-rsa您开头的字符串已经有SSH密钥对,您可以跳过下一部分的生成部分并跳到复制到剪贴板步骤

如果您没有看到该字符串或想要生成具有自定义名称的SSH密钥对,请继续执行下一步

请注意,公共SSH密钥也可以如下命名:

  • id_dsa.pub
  • id_ecdsa.pub
  • id_ed25519.pub

 生成新的SSH密钥对

1.要生成新的SSH密钥对,请使用以下命令:

Windows / GNU / Linux / macOS上的Git Bash:

ssh-keygen -t rsa -C "your.email@example.com"

密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。这里使用的是rsa。

同时在密钥中有一个注释字段,用-C来指定所指定的注释,可以方便用户标识这个密钥,指出密钥的用途或其他有用的信息。所以在这里输入自己的邮箱或者其他都行。

输入完毕后程序同时要求输入一个密语字符串(passphrase),空表示没有密语。接着会让输入2次口令(password),空表示没有口令。3次回车即可完成当前步骤,此时[c盘>用户>自己的用户名>.ssh]目录下已经生成好了。

视窗:

或者在Windows上,您可以下载PuttyGen 并按照此文档文章生成SSH密钥对。

2.下一步是复制公共SSH密钥,因为我们之后将需要它

要将公共SSH密钥复制到剪贴板,请使用以下相应的代码:

MacOS的:

pbcopy < ~/.ssh/id_rsa.pub

 GNU / Linux(需要xclip包):

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

 Windows命令行:

type %userprofile%\.ssh\id_rsa.pub | clip

Windows / Windows PowerShell上的Git Bash: 

cat ~/.ssh/id_rsa.pub | clip

3.最后一步是将您的公共SSH密钥添加到GitLab。 

登录github。打开setting->SSH keys,点击右上角 New SSH key,把生成好的公钥id_rsa.pub放进 key输入框中,再为当前的key起一个title来区分每个key。

如果您手动复制了公共SSH密钥,请确保从ssh-rsa您的电子邮件开始复制整个密钥。

4.(可选)您可以通过运行ssh -T git@example.com
(替换example.com为GitLab域)并验证是否收到Welcome to GitLab消息来测试您的设置。

故障排除

如果在Git克隆上,系统会提示您输入密码,例如git@gitlab.com's password:     SSH设置有问题。

  • 确保您正确生成了SSH密钥对,并将公共SSH密钥添加到GitLab配置文件中
  • 尝试使用ssh-agent本文档前面所述的手动注册私有SSH密钥
  • 尝试通过运行调试连接ssh -Tv git@example.com(替换example.com为您的GitLab域)