构建Python Docker镜像时SSH连接GitHub失败,如何解决?
问题描述
需求
尝试在构建Python Docker镜像时通过SSH连接GitHub,使用的Dockerfile如下:
FROM python:3.10.4 AS builder ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 WORKDIR /running COPY ./pyproject.toml ./ # copy key COPY github.pem /root/.ssh/id_rsa RUN chmod 600 /root/.ssh/id_rsa # Add the necessary SSH config RUN echo 'Host * \n\ IdentityFile /root/.ssh/id_rsa \n\ ' > /root/.ssh/config RUN which ssh RUN ssh -T git@github.com
遇到的错误
构建时出现以下错误:
#12 [8/8] RUN ssh -T git@github.com #12 sha256:009cd770ecaf452b09b48969487c7957d5c5fddf449cc2ea54bc195b09c44e37 #12 1.230 Host key verification failed. #12 ERROR: executor failed running [/bin/sh -c ssh -T git@github.com]: exit code: 255
本地Mac环境使用该SSH密钥可正常连接GitHub。
咨询
如何在构建Docker镜像时成功连接GitHub?
解决方案
出现Host key verification failed是因为Docker构建环境是全新的,没有预存GitHub的主机公钥,导致SSH连接时无法验证主机身份。本地环境能正常连接是因为之前已通过交互验证过GitHub的主机密钥,密钥已存在本地~/.ssh/known_hosts文件中。
解决方法如下:
方法一:安全添加GitHub主机密钥(推荐)
- 在本地终端执行以下命令,获取GitHub的主机公钥:
ssh-keyscan github.com > github_host_keys
- 将生成的
github_host_keys文件和你的github.pem放在同一目录下,修改Dockerfile:
FROM python:3.10.4 AS builder ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 WORKDIR /running COPY ./pyproject.toml ./ # 创建.ssh目录并设置正确权限 RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh # 复制GitHub主机公钥到known_hosts COPY github_host_keys /root/.ssh/known_hosts RUN chmod 644 /root/.ssh/known_hosts # 复制SSH密钥并设置权限 COPY github.pem /root/.ssh/id_rsa RUN chmod 600 /root/.ssh/id_rsa # 添加SSH配置 RUN echo 'Host * \n\ IdentityFile /root/.ssh/id_rsa \n\ ' > /root/.ssh/config RUN chmod 600 /root/.ssh/config # 测试SSH连接 RUN ssh -T git@github.com
方法二:临时跳过主机密钥验证(仅用于测试,不推荐生产环境)
如果只是临时测试,可以在SSH命令中添加参数跳过主机验证,但这会带来安全风险:
# 替换原有的测试命令 RUN ssh -o StrictHostKeyChecking=no -T git@github.com
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

