[gitlab-CI/CD]--运行报错Host key verification failed

本文档介绍了如何处理在使用GitLab CI/CD时遇到的SSH连接错误,如Host key verification failed和Permission denied。解决方案包括:生成新的SSH密钥对,将私钥作为GitLab项目变量,通过Docker执行器加载私钥,并修改.gitlab-ci.yml文件以添加必要的脚本。通过这些步骤,可以成功部署代码并避免SSH连接错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近研究gitlab-CI/CD时,job运行报错,查看日志信息

$ scp code/*.sh root@11.22.33.55:/root/
Host key verification failed.

报错信息或者是“Permission denied, please try again.”

解决方案:
1.参考官方文档,在本地搭建的gitlab的以下路径中找到官方的ssh_keys文档内容
http://11.22.33.44:18080/help/ci/ssh_keys/README.md

How it works(步骤):
1.Create a new SSH key pair locally with ssh-keygen
2.Add the private key as a variable to your project
3.Run the ssh-agent during job to loadthe private key.
4.Copy the public key to the servers you want to have access to (usually in ~/.ssh/authorized_keys) or add it as a deploy key if you are accessing a private GitLab repository.

我们的gitlab-runner是用docker拉起来的,所以主要讲解(SSH keys when using the Docker executor)

实现流程:
1.You will f

<think>嗯,用户现在问的是如何在CentOS 7上配置GitLab Runner的公钥和密钥。之前他们问过关于SSH配置和权限的问题,现在可能是在部署过程中需要设置自动化的CI/CD流程,使用GitLab Runner来进行代码同步或部署。这时候,正确配置SSH密钥对是关键,以便GitLab Runner能够无密码访问目标服务器,比如通过rsync或SSH命令。 首先,我需要确定用户的实际需求。他们可能已经设置了GitLab Runner,但遇到权限问题,或者在自动化任务中需要SSH连接到另一台服务器。这时候,配置SSH密钥对可以避免在每次连接时输入密码,提高自动化流程的效率和安全性。 接下来,我要回忆在CentOS 7上配置SSH密钥对的步骤。通常,这包括生成密钥对、将公钥上传到目标服务器,并确保权限设置正确。但是,GitLab Runner通常以gitlab-runner用户运行,所以需要注意该用户的环境和权限。 用户可能遇到的问题包括:生成的密钥位置是否正确,权限设置是否足够严格,以及如何将公钥添加到目标服务器的authorized_keys文件中。此外,SELinux或防火墙设置也可能导致连接问题,需要检查。 还要考虑是否需要为gitlab-runner用户单独生成密钥,或者使用现有用户的密钥。通常,最佳实践是为每个服务使用单独的密钥,以增强安全性。另外,确保私钥的权限为600,.ssh目录为700,否则SSH会拒绝连接。 可能还需要在GitLab CI/CD的配置文件中指定使用特定的SSH密钥,比如在.gitlab-ci.yml中使用ssh-add命令添加私钥,或者配置SSH客户端选项。 此外,用户可能不知道如何在GitLabCI/CD变量中安全地存储私钥,这需要指导他们将私钥内容作为变量添加,并在作业中写入到文件,同时设置正确的权限。 最后,测试连接是否成功是关键步骤,可以通过在CI/CD脚本中执行ssh命令来验证,或者手动切换到gitlab-runner用户进行测试。如果遇到问题,查看日志文件,如/var/log/secure,来排查错误。</think>### **GitLab Runner 公钥/密钥配置(CentOS 7 详细步骤)** 在 CentOS 7 上为 `gitlab-runner` 配置 SSH 公钥和密钥,主要用于自动化任务(如 `rsync` 或 `scp`)的无密码认证。以下是完整操作流程: --- #### **1. 生成 SSH 密钥对** **以 `gitlab-runner` 用户身份生成密钥** 由于 GitLab Runner 默认以 `gitlab-runner` 用户运行,需确保密钥属于该用户: ```bash # 切换到 gitlab-runner 用户 sudo su - gitlab-runner # 生成密钥对(默认路径 ~/.ssh/id_rsa) ssh-keygen -t rsa -b 4096 -C "gitlab-runner@centos7" ``` - **交互提示**: - 直接按回车使用默认路径 (`/var/lib/gitlab-runner/.ssh/id_rsa`)。 - 无需设置密码(否则自动化任务需交互输入密码)。 --- #### **2. 配置公钥到目标服务器** 将生成的公钥(`id_rsa.pub`)添加到目标服务器的 `~/.ssh/authorized_keys` 文件中: ```bash # 查看公钥内容 cat ~/.ssh/id_rsa.pub # 手动复制公钥内容(或通过 ssh-copy-id 自动上传) ssh-copy-id -i ~/.ssh/id_rsa.pub user@target-server-ip ``` **目标服务器操作**: 确保目标服务器上的用户 `.ssh/authorized_keys` 权限正确: ```bash # 权限设置(目标服务器) chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` --- #### **3. 验证 SSH 无密码登录** 在 CentOS 7 的 `gitlab-runner` 用户下测试连接: ```bash # 切换到 gitlab-runner 用户 sudo su - gitlab-runner # 测试 SSH 连接(替换为目标用户和 IP) ssh -o StrictHostKeyChecking=no user@target-server-ip ``` - **若成功**:直接进入目标服务器 Shell。 - **若失败**:检查 `/var/log/secure` 或目标服务器的 SSH 日志。 --- #### **4. 配置 GitLab CI/CD 使用密钥** 在 GitLab 项目的 CI/CD 流程中,需确保 Runner 能访问私钥。以下是两种常见方法: --- ##### **方法 1:直接配置私钥路径(推荐)** 在 `.gitlab-ci.yml` 中指定私钥路径(需提前将私钥放置在 Runner 服务器上): ```yaml job-name: script: - ssh -i /var/lib/gitlab-runner/.ssh/id_rsa user@target-server-ip "command" ``` --- ##### **方法 2:通过 CI/CD 变量注入私钥** 更安全的方式是将私钥内容存储为 GitLab 项目的 **CI/CD 变量**,并在任务中动态写入文件: 1. **将私钥内容存入变量**: -GitLab 项目页面:**Settings > CI/CD > Variables**。 - 添加变量 `SSH_PRIVATE_KEY`,值为私钥内容(复制 `id_rsa` 的完整内容)。 2. **在 `.gitlab-ci.yml` 中写入私钥**: ```yaml job-name: before_script: - mkdir -p ~/.ssh - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan -H target-server-ip >> ~/.ssh/known_hosts script: - ssh user@target-server-ip "deploy-command" ``` --- #### **5. 解决常见问题** ##### **问题 1:权限不足** - **错误提示**:`Permissions 0644 for 'id_rsa' are too open` - **解决**: ```bash chmod 600 ~/.ssh/id_rsa chmod 700 ~/.ssh ``` ##### **问题 2:Host Key 验证失败** - **错误提示**:`Host key verification failed` - **解决**:在 CI 脚本中禁用严格检查或提前收集 Host Key: ```yaml before_script: - ssh-keyscan -H target-server-ip >> ~/.ssh/known_hosts ``` ##### **问题 3:SELinux 限制** - **错误提示**:`Permission denied` 且日志显示 SELinux 拦截 - **解决**:调整 SELinux 策略或临时禁用(生产环境慎用): ```bash # 临时禁用 sudo setenforce 0 # 永久禁用(修改 /etc/selinux/config) sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ``` --- #### **6. 完整示例** 假设目标服务器 IP 为 `192.168.1.100`,用户为 `deploy`,配置步骤如下: 1. **生成密钥对**: ```bash sudo su - gitlab-runner ssh-keygen -t rsa -b 4096 -C "gitlab-runner@centos7" ``` 2. **上传公钥**: ```bash ssh-copy-id deploy@192.168.1.100 ``` 3. **GitLab CI/CD 配置**: ```yaml deploy-job: before_script: - mkdir -p ~/.ssh - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan -H 192.168.1.100 >> ~/.ssh/known_hosts script: - rsync -avz -e "ssh -i ~/.ssh/id_rsa" src/ deploy@192.168.1.100:/var/www/ ``` --- 通过以上步骤,GitLab Runner 可在 CentOS 7 上安全使用 SSH 密钥对实现自动化任务的无密码认证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值