GitLab CI / CD管道配置参考 .gitlab-ci.yml文件定义字段(gitlab和github区别)
963
2022-05-30
亚搏体育app文件
亚搏体育app CI / CD
在Gitlab CI / CD上使用SSH密钥
在GitLab CI / CD上使用SSH密钥
上次更新时间:2017-12-13•
Using SSH keys with GitLab CI/CD
GitLab当前不支持在构建环境(运行GitLab Runner的环境)中管理SSH密钥的内置支持。
SSH密钥在以下情况下很有用:
您想签出内部子模块
您想使用包管理器(例如Bundler)下载私有包
您想要将应用程序部署到自己的服务器上,例如Heroku
您要执行从构建环境到远程服务器的SSH命令
您想将文件从构建环境同步到远程服务器
如果上述任何事情都响了,那么您很可能需要SSH密钥。
支持最广泛的方法是通过扩展.gitlab-ci.yml,将SSH密钥注入到构建环境中,并且该解决方案可与任何类型的执行程序 (Docker,shell等)一起使用。
这个怎么运作
使用以下命令在本地创建新的SSH密钥对 ssh-keygen
将私钥作为变量添加到您的项目中
运行ssh-agent期间作业以加载私钥。
将公共密钥复制到您想要访问的服务器上(通常在中 ~/.ssh/authorized_keys),或者 在访问私有GitLab存储库时将其添加为部署密钥。
注意: 除非您启用 调试日志 记录,否则私钥将不会显示在作业日志中 。您可能还需要检查 管道 的可见性。
使用Docker执行器时的SSH密钥
当您的CI / CD作业在Docker容器中运行(意味着包含环境)并且您想要在私有服务器中部署代码时,您需要一种访问它的方法。这是SSH密钥对派上用场的地方。
您首先需要创建一个SSH密钥对。有关更多信息,请按照说明生成SSH密钥。 请勿在SSH密钥中添加密码,否则before_script会提示您输入密码。
创建一个新变量。在“ 密钥”中输入名称,SSH_PRIVATE_KEY然后在“ 值”字段中粘贴先前创建的私钥的内容。
修改您.gitlab-ci.yml的before_script操作。在以下示例中,假定使用基于Debian的图像。根据需要进行编辑:
before_script: ## ## Install ssh-agent if not already installed, it is required by Docker. ## (change apt-get to yum if you use an RPM-based image) ## - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' ## ## Run ssh-agent (inside the build environment) ## - eval $(ssh-agent -s) ## ## Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store ## We're using tr to fix line endings which makes ed25519 keys work ## without extra base64 encoding. ## https://gitlab.com/gitlab-examples/ssh-private-key/issues/1#note_48526556 ## - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - ## ## Create the SSH directory and give it the right permissions ## - mkdir -p ~/.ssh - chmod 700 ~/.ssh ## ## Optionally, if you will be using any Git commands, set the user name and ## and email. ## #- git config --global user.email "user@example.com" #- git config --global user.name "User name"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
注: 在 before_script 可以全局或每一个作业设置。
确保专用服务器的SSH主机密钥已验证。
作为最后一步,加上公众从你的第一步,你想拥有从构建环境中的接入服务创建的一个关键。如果要访问私有的GitLab存储库,则需要将其添加为部署密钥。
而已!现在,您可以在构建环境中访问私有服务器或存储库。
使用Shell执行程序时的SSH密钥
如果您使用的是Shell执行程序而不是Docker,则设置SSH密钥会更加容易。
您可以从安装了GitLab Runner的计算机生成SSH密钥,并将该密钥用于在该计算机上运行的所有项目。
首先,登录到运行您的作业的服务器。
然后,从终端以gitlab-runner用户身份登录:
sudo su - gitlab-runner
1
按照说明生成SSH密钥对,以 生成SSH密钥。 请勿在SSH密钥中添加密码,否则before_script会提示您输入密码。
作为最后一步,加上公众从前面创建要具有从构建环境中的接入服务的一个关键。如果要访问私有的GitLab存储库,则需要将其添加为 部署密钥。
完成后,尝试登录到远程服务器以接受指纹:
ssh example.com
1
要访问GitLab.com上的存储库,可以使用git@gitlab.com。
验证SSH主机密钥
最好检查私有服务器自己的公用密钥,以确保您不会受到中间人攻击的攻击。万一发生任何可疑事件,您将注意到它,因为作业将失败(如果公钥不匹配,则SSH连接将失败)。
要查找服务器的主机密钥,请ssh-keyscan从受信任的网络(最好从专用服务器本身)运行命令:
## Use the domain name ssh-keyscan example.com ## Or use an IP ssh-keyscan 1.2.3.4
1
2
3
4
5
创建一个新变量,将其 SSH_KNOWN_HOSTS作为“键”,并作为“值”添加的输出ssh-keyscan。
注意: 如果需要连接到多个服务器,则所有服务器主机密钥都需要收集在变量的 Value 中,每行一个密钥。
提示: 通过使用变量而不是 ssh-keyscan 直接在变量内部 .gitlab-ci.yml ,它具有以下优点: .gitlab-ci.yml 如果主机域名由于某些原因而更改,则不必更改。而且,这些值是由您预定义的,这意味着如果主机密钥突然更改,CI / CD作业将失败,并且您将知道服务器或网络出了点问题。
现在SSH_KNOWN_HOSTS已经创建了变量,除了 上面的 内容.gitlab-ci.yml之外,还需要添加以下内容:
before_script: ## ## Assuming you created the SSH_KNOWN_HOSTS variable, uncomment the ## following two lines. ## - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts ## ## Alternatively, use ssh-keyscan to scan the keys of your private server. ## Replace example.com with your private server's domain name. Repeat that ## command if you have more than one server to connect to. ## #- ssh-keyscan example.com >> ~/.ssh/known_hosts #- chmod 644 ~/.ssh/known_hosts ## ## You can optionally disable host key checking. Be aware that by adding that ## you are susceptible to man-in-the-middle attacks. ## WARNING: Use this only with the Docker executor, if you use it with shell ## you will overwrite your user's SSH config. ## #- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
示例项目
为了方便起见,我们建立了一个示例SSH项目,使用我们的公共 共享运行程序在GitLab.com上运行。
想要破解吗?只需对其进行分叉,提交并推送您的更改。稍后,公共跑步者将选择更改并开始工作。
Git GitHub ssh
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。