Gitlab Runners on Fargate自定义镜像无法与EC2管理Runner连接求助
GitLab Runner Fargate自定义镜像SSH连接失败解决办法
核心问题
GitLab Runner的Fargate驱动依赖SSH管理任务容器,你的自定义镜像缺少官方镜像自带的SSH密钥自动配置逻辑,导致EC2管理节点无法连接Fargate任务。
具体实现步骤
1. 给镜像安装sshd及依赖
根据你的基础镜像选择对应命令:
- Debian/Ubuntu系:
RUN apt-get update && apt-get install -y --no-install-recommends openssh-server sudo && \ rm -rf /var/lib/apt/lists/*
- Alpine系:
RUN apk add --no-cache openssh sudo
2. 配置sshd允许公钥登录
修改sshd配置,开启公钥认证、禁用密码登录:
RUN mkdir /var/run/sshd && \ echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config && \ echo "PasswordAuthentication no" >> /etc/ssh/sshd_config && \ echo "ChallengeResponseAuthentication no" >> /etc/ssh/sshd_config
3. 编写启动脚本处理SSH公钥环境变量
官方镜像会自动读取RUNNER_SSH_PUB_KEY环境变量,并将公钥写入runner用户的authorized_keys。你需要自己实现这个逻辑,创建启动脚本/usr/local/bin/start-runner.sh:
#!/bin/bash set -e # 不存在runner用户则创建,并赋予sudo权限 if ! id -u runner >/dev/null 2>&1; then useradd -m -s /bin/bash runner echo "runner ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/runner chmod 0440 /etc/sudoers.d/runner fi # 将环境变量中的公钥写入runner用户的authorized_keys mkdir -p /home/runner/.ssh echo "$RUNNER_SSH_PUB_KEY" > /home/runner/.ssh/authorized_keys chown -R runner:runner /home/runner/.ssh chmod 0700 /home/runner/.ssh chmod 0600 /home/runner/.ssh/authorized_keys # 启动sshd服务 /usr/sbin/sshd -D
然后在Dockerfile中添加脚本相关配置:
COPY start-runner.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/start-runner.sh CMD ["/usr/local/bin/start-runner.sh"]
4. 本地验证镜像配置
构建镜像后,本地启动容器测试SSH连接:
docker run -e RUNNER_SSH_PUB_KEY="你的测试公钥内容" -p 2222:22 你的镜像名称
用对应私钥尝试登录:
ssh -p 2222 runner@localhost
能成功登录则说明镜像的SSH配置正常。
5. 确认GitLab Runner配置中的环境变量传递
检查config.toml的Fargate配置,确保RUNNER_SSH_PUB_KEY正确传递:
[[runners]] name = "Fargate Runner" executor = "fargate" [runners.fargate] # 保留其他原有配置 environment = ["RUNNER_SSH_PUB_KEY=你的EC2管理节点公钥内容"]
常见排查点
- 检查Fargate任务的安全组,是否允许22端口从EC2管理节点的IP访问
- 确认EC2管理节点的私钥与传递给Fargate任务的公钥是配对的
- 查看Fargate任务日志,确认启动脚本是否正常执行、sshd服务是否成功启动
内容的提问来源于stack exchange,提问作者Dvir
相关产品推荐
相关产品推荐

