本文概述
当你使用Git存储库时, 许多人可能会积极地修改你的项目。其中一些人可能不是值得信赖的, 因为他们可能是新员工或类似的人。在这种情况下, 如果他们需要在服务器中执行git pull来更新生产服务器中的提交更改, 则可能不希望所有人都知道存储库的密码。另一种情况是你不想每次执行git pull或git clone时都提供存储库的密码, 这是自动部署。
这就是Gitlab中存在”部署密钥”功能的原因。部署密钥是SSH密钥, 存储在你的服务器上并授予对单个Gitlab存储库的访问权限。该密钥直接附加到存储库, 而不是个人用户帐户。在本文中, 我们将逐步向你展示如何自动化在Gitlab上托管的项目的部署过程。
1.查找或创建服务器的SSH密钥
你需要做的第一件事是验证服务器是否已经在服务器中用户的.ssh目录中创建了公钥, 因此启动到服务器的SSH会话并键入以下命令:
cat ~/.ssh/id_rsa.pub
这将自动在你的用户文件夹(在我们的情况下为/home/vagrant/.ssh)中搜索, 如果命令的输出显示以ssh-rsa开头的字符串, 则你已经具有可以使用的SSH密钥添加到你的存储库, 因此你可以跳到步骤2。如果相反, 你将获得输出:cat:〜/ .ssh / id_rsa.pub:没有这样的文件或目录, 那么你将需要首先创建SSH密钥。你可以使用以下命令通过SSH在Ubuntu中创建SSH密钥(首先导航至.ssh目录并键入):
ssh-keygen -t rsa
为了简化此过程, 我们不会为SSH密钥添加密钥短语, 因此如创建向导中所述, 只需按Enter即可不使用密钥短语:
如图所示, .ssh目录中没有id_rsa和id_rsa.pub文件。该密钥用作”通过”, 可以在当前服务器中克隆/拉动你的项目, 直到此刻它什么都不做, 因此你将需要执行其他步骤。
2.配置SSH客户端以在服务器中找到你的GitLab专用SSH
下一步, 你需要确定从Gitlab进行克隆时, 应将部署密钥用作身份验证, 而不是用户名和密码。为此, 你需要通过运行以下命令来确保启用ssh-agent:
eval $(ssh-agent -s)
然后, 你可以使用以下命令将密钥添加到SSH注册表中:
# Add your private key
ssh-add ~/.ssh/id_rsa
要保留这些设置, 你需要将它们保存到配置文件中。通常, 在OpenSSH客户端上, 你可以在〜/ .ssh / config文件中进行配置。如果该文件不存在, 则可以创建它:
# Go to SSH directory
cd ~/.ssh/
# Create the config file
# alternatively create the file using SFTP
# or in the way you want, we are using touch
touch config
并在文件中注册你的密钥。在本教程中, 我们将从Gitlab网站(非自托管版本)添加单个SSH密钥, 因此我们的配置文件内容为:
# GitLab.com server
Host gitlab.com
RSAAuthentication yes
IdentityFile ~/.ssh/id_rsa
由于你可能在一台服务器上有多个项目, 或者一个项目使用需要更新的不同存储库, 因此你可以毫无问题地在同一文件中使用以下符号实现多个SSH密钥:
# GitLab.com server
Host gitlab.com
RSAAuthentication yes
IdentityFile ~/.ssh/config/private-key-filename-01
# Private GitLab server
Host gitlab.mycompany.com
RSAAuthentication yes
IdentityFile ~/.ssh/config/private-key-filename
3.将服务器密钥作为部署密钥添加到存储库配置中
现在, 你需要服务器的公共密钥(在步骤1中创建), 在此步骤中, 你对Gitlab说:”嘿, 如果有人使用此SSH密钥进行克隆, 请允许他这样做。”你可以使用文本编辑器通过SFTP来获取公共文件的内容, 或者仅使用以下命令使用SSH打印文件的输出即可:
cat ~/.ssh/id_rsa.pub
在我们的情况下, 这将输出公钥的内容:
将长字符串保留在剪贴板中, 因为你需要将其粘贴到Gitlab中。接下来需要访问Gitlab中存储库的设置, 在本例中, 因为我们使用的是非自托管版本的Gitlab, 部署密钥的配置位于https://gitlab.com/ <用户名> / <存储库名称> /设置/存储库。添加新部署密钥的菜单如下所示:
在这里, 你只需要添加id_rsa.pub文件的内容, 提供标题, 并确定服务器是否可以用于进行更改(通常未经检查, 因为它是正式生产的)即可。将密钥添加到存储库后, 你现在应该可以在部署服务器中克隆/拉动存储库。
4.克隆并提取存储库以进行测试
最后一步, 要验证一切是否正确, 你可以克隆存储库以查看是否请求存储库的凭据(如果需要), 请再次阅读该教程并检查做错了什么。否则, 你将能够使用以下命令克隆你的项目:
注意
记住要通过SSH而不是HTTPS进行克隆, 否则显然可能会要求你提供凭据。
git clone git@gitlab.com:username/repositoryname.git
# Or once the project is clone, pull changes
git pull origin master
通过这样做, 你可能已经注意到, 由于有了部署密钥, 你不必输入Gitlab用户名或密码!
编码愉快!
评论前必须登录!
注册