GitLab和SSH密钥
Git是一个分布式版本控制系统,这意味着您可以在本地工作,但也可以共享或“推送”您的更改到其他服务器。在您将更改推送到GitLab服务器之前,您需要一个用于共享信息的安全通信通道。
SSH协议提供了这种安全性,并允许您每次都向GitLab远程服务器进行身份验证,而无需提供您的用户名或密码。
有关SSH协议如何工作的更详细的解释,我们建议您阅读这是DigitalOcean制作的教程.
定位已存在的SSH密钥对
在生成新的SSH密钥对之前,请检查您的系统是否已经在默认位置有一个密钥对,打开shell或Windows上的命令提示符,并运行以下命令:
Windows命令提示符:
类型% userprofile %\.ssh我\d_rsa.pub
Git Bash适用于Windows / GNU/Linux / macOS / PowerShell:
猫~ / . ssh / id_rsa . pub
如果你看到以将
您已经有了SSH密钥对,可以跳过下一节的生成部分,跳到复制到剪贴板步骤。如果您没有看到该字符串,或者希望生成具有自定义名称的SSH密钥对,则继续执行下一步。
注意SSH公钥也可以命名为:
id_dsa.pub
id_ecdsa.pub
id_ed25519.pub
生成新的SSH密钥对
使用实例生成新的SSH密钥对。
Git Bash适用于Windows / GNU/Linux / macOS:
ssh - keygen- trsa- c“your.email@example.com”- b4096
窗口:
接下来,系统将提示您输入保存SSH密钥对的文件路径。
如果您还没有SSH密钥对,请按enter键使用建议的路径。使用建议的路径通常允许SSH客户端自动使用SSH密钥对,而不需要额外配置。
如果您已经拥有具有建议文件路径的SSH密钥对,那么您将需要输入一个新的文件路径,并声明这个SSH密钥对将用于您的应用程序中的哪个主机
. ssh / config
文件的更多信息,请参考使用非默认的SSH密钥对路径获取更多信息。输入文件路径后,系统将提示您输入密码以确保SSH密钥对的安全。使用SSH密钥对的密码是一种最佳实践,但这不是必须的,您可以通过按enter跳过创建密码。
注意:注意:如果需要修改SSH密钥对的密码,可以使用
Ssh-keygen -p
.下一步是复制公共SSH密钥,因为我们稍后将需要它。
要将您的公共SSH密钥复制到剪贴板,请使用以下适当的代码:
macOS:
Pbcopy < ~/.ssh/id_rsa.pub
GNU/Linux(需要xclip包):
xclip选取剪辑< ~/.ssh/id_rsa.pub
Windows命令行:
类型% userprofile %\.ssh我\d_rsa.pub| clip
Git Bash在Windows / Windows PowerShell:
猫~ / . ssh / id_rsa . pub| clip
最后一步是将您的公共SSH密钥添加到GitLab。
导航到“配置文件设置”中的“SSH密钥”选项卡。粘贴你的钥匙在“钥匙”部分,并给它一个相关的“标题”。使用一个可识别的标题,如“工作笔记本电脑- Windows 7”或“家用MacBook Pro 15”。
如果您手动复制了您的公共SSH密钥,请确保您复制了从
将
最后以邮件结尾。您可以选择通过运行来测试您的设置
ssh -T git@example.com
(替换example.com
与你的GitLab域),并验证你收到一个欢迎来到GitLab
消息。
使用非默认的SSH密钥对路径
如果您使用非默认文件路径作为GitLab SSH密钥对,则必须配置SSH客户端以找到连接到GitLab服务器的GitLab私有SSH密钥gitlab.com
).
对于当前的终端会话,您可以使用以下命令(替换other_id_rsa
使用您的私人SSH密钥):
Git Bash适用于Windows / GNU/Linux / macOS:
eval$ (ssh-agent- s)ssh-add ~ / . ssh / other_id_rsa
要保留这些设置,您需要将它们保存到配置文件中。对于OpenSSH客户端,这是在~ / . ssh / config
用于某些操作系统的文件。下面是两个使用自己的SSH密钥的主机配置示例:
# GitLab.com服务器主机gitlab.comRSAAuthentication是的IdentityFile ~ / . ssh / config / private-key-filename-01#私有GitLab服务器主机gitlab.company.comRSAAuthentication是的IdentityFile ~ / . ssh / config / private-key-filename
由于SSH客户端种类繁多,有大量的配置选项,对这些主题的进一步解释超出了本文档的范围。
公共SSH密钥必须是唯一的,因为它们将绑定到您的帐户。您的SSH密钥是您通过SSH推送代码时拥有的唯一标识符。这就是为什么它需要唯一地映射到单个用户。
部署的钥匙
每个存储库部署密钥
部署密钥允许使用单个SSH密钥对对一个或多个项目进行只读或读写(如果启用)访问。
这对于将存储库克隆到持续集成(CI)服务器非常有用。通过使用部署密钥,您不必设置一个虚拟用户帐户。
如果您是项目管理员或所有者,您可以在“Repository”部分的项目设置中添加部署键。为新的部署密钥指定一个标题,并粘贴一个公共SSH密钥。在此之后,使用相应的私有SSH密钥的计算机对项目具有只读或读写(如果启用)访问权。
不能使用表单两次添加相同的部署键。如果您想将相同的密钥添加到另一个项目,请在“从可用的项目部署密钥”列表中启用它。您可以访问的所有项目的所有部署键都可用。这种项目访问可以通过成为项目的直接成员或通过一个组来实现。
部署键可以在项目之间共享,您只需要将它们添加到每个项目。
全局共享部署密钥
全局共享部署键允许在整个GitLab安装中的任何存储库上配置只读或读写(如果启用)访问。
这对于将存储库集成到安全的、共享的持续集成(Continuous Integration, CI)服务或其他共享服务非常有用。GitLab管理员可以在GitLab中设置全局共享部署密钥,并将私钥添加到任何共享系统。当项目管理员(或更高级别)授权将全局共享部署密钥用于其项目时,各个存储库选择使用这些密钥公开其存储库。
与每个项目部署密钥相比,全局共享密钥可以提供更高的安全性,因为目标集成系统的管理员是唯一需要知道和配置私钥的人。
GitLab管理员在section下面的Admin区域设置全局部署键部署的钥匙.确保密钥有一个有意义的标题,因为这将是项目管理员和所有者识别要添加的正确全局部署密钥的主要方式。例如,如果密钥允许访问SaaS CI实例,则在密钥名称中使用该服务的名称(如果仅用于此)。在创建全局共享部署键时,请考虑键的粒度——它们可以用于非常狭窄的用途,例如仅用于特定的服务,也可以用于更广泛的用途,例如“需要对存储库提供读访问权限的任何地方”。
一旦GitLab管理员添加了全局部署键,项目管理员和所有者就可以将其添加到项目的全局部署键中>存储库部分,扩展部署的关键部分,单击启用下面列出的适当的键可用于任何项目的公共部署密钥.
注意:注意:标题可用于任何项目的公共部署密钥只有配置了至少一个全局部署键时才会出现。
警告:警告:定义全局部署密钥不会通过密钥公开任何给定的存储库,直到该存储库将全局部署密钥添加到其项目中。通过这种方式,全局部署密钥允许其他系统访问,但不隐式地通过设置它们来授予任何访问权。
应用程序
Eclipse
如何将SSH密钥添加到Eclipse:https://wiki.eclipse.org/EGit/User_Guide#Eclipse_SSH_Configuration
在GitLab服务器上执行SSH命令
GitLab与系统安装的SSH守护进程集成,指定用户(通常是命名用户)git
),处理所有查阅要求。通过SSH连接到GitLab服务器的用户由他们的SSH密钥而不是他们的用户名标识。
SSH客户端在GitLab服务器上执行的操作将以该用户执行。虽然可以修改该用户的SSH配置,例如,提供一个私有SSH密钥来验证这些请求,但这种做法是错误的不支持强烈反对,因为它会带来重大的安全风险。
GitLab检查过程包括对这个条件的检查,如果你的服务器是这样配置的,它会引导你到这个部分,例如:
$ gitlab-rake:检查#……Git用户是否有默认SSH配置?...没有试着修正一下:mkdir ~ / gitlab -检查-备份- 1504540051Sudo mv /var/lib/git/。ssh/id_rsa ~/gitlab-check-backup-1504540051Sudo mv /var/lib/git/.ssh/id_rsa。酒吧~ / gitlab -检查-备份- 1504540051有关更多信息,请参阅:doc / ssh / README。“GitLab服务器上的SSH”小节中的md请修复上面的错误并重新运行检查。
尽可能快地删除自定义配置。这些自定义是明确不支持并且随时可能停止工作。
故障排除
如果在Git克隆上,你会被提示输入密码git@gitlab.com的密码:
您的SSH设置有问题。
- 确保您正确地生成了SSH密钥对,并将公共SSH密钥添加到GitLab配置文件中
- 尝试手动注册您的私有SSH密钥使用
ssh-agent
如本文前面所述 - 尝试通过运行来调试连接
ssh -Tv git@example.com
(替换example.com
用你的GitLab域名)