Spring Boot Config Server Docker容器SSH访问Git仓库认证失败
Spring Boot Config Server Docker容器SSH认证失败排查与修复
我搭建了一个Spring Boot Config Server,通过SSH拉取私有GitHub仓库的配置文件。本地运行完全正常,但部署到Docker容器后,服务能启动却无法拉取配置,连接GitHub时出现AUTH FAILS认证失败错误。
我的application.yml配置:
server: port: 8888 spring: application: name: configserver cloud: config: server: git: uri: git@github.com:<your-repo>.git # 替换为实际SSH地址 ignoreLocalSshSettings: false passphrase: <your-passphrase> # 若私钥有密码则填写 defaultLabel: master
尝试的Dockerfile:
FROM openjdk:11 ARG SSH_PRIVATE_KEY RUN mkdir ~/.ssh/ RUN echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_ecdsa RUN chmod 600 ~/.ssh/id_ecdsa RUN ssh-keyscan github.com >> ~/.ssh/known_hosts RUN bash -c 'echo -e "Host *\n\tIdentifyFile ~/.ssh/id_ecdsa" >> ~/.ssh/config >> ~/.ssh/config' ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} config-server.jar ENTRYPOINT ["java", "-jar", "/config-server.jar"]
构建命令:
docker build --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_ecdsa)" -t config-server .
问题根源分析
- 私钥格式损坏:使用
echo写入私钥时会自动去除换行符,导致私钥无法被SSH客户端识别。 - SSH配置语法错误:Dockerfile中重复执行
>> ~/.ssh/config,导致配置文件被错误追加两次,引发解析异常。 - 权限与路径问题:容器内用户上下文可能无法正确读取私钥文件,或路径配置不明确。
修正步骤
1. 修复Dockerfile
替换原有Dockerfile为以下内容:
FROM openjdk:11 ARG SSH_PRIVATE_KEY # 创建.ssh目录并设置严格权限 RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh # 用printf保留换行符,正确写入私钥 RUN printf "%s" "${SSH_PRIVATE_KEY}" > /root/.ssh/id_ecdsa && chmod 600 /root/.ssh/id_ecdsa # 添加GitHub到已知主机列表 RUN ssh-keyscan github.com >> /root/.ssh/known_hosts && chmod 644 /root/.ssh/known_hosts # 正确配置SSH客户端(指定GitHub主机,避免全局匹配) RUN echo -e "Host github.com\n\tIdentityFile /root/.ssh/id_ecdsa\n\tStrictHostKeyChecking no" > /root/.ssh/config && chmod 600 /root/.ssh/config # 复制jar包并启动服务 ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} config-server.jar ENTRYPOINT ["java", "-jar", "/config-server.jar"]
2. 调整Spring配置(按需处理)
- 如果私钥没有密码,直接移除
passphrase配置项; - 确保Git URI使用标准SSH格式(
git@github.com:<user>/<repo>.git),而非HTTPS地址; - 开启调试日志排查细节:
logging: level: org.springframework.cloud.config.server: DEBUG org.eclipse.jgit: DEBUG
3. 重新构建并验证
执行构建命令:
docker build --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_ecdsa)" -t config-server .
启动容器后,可进入容器测试SSH连接是否正常:
docker exec -it <container-id> ssh -T git@github.com
返回Hi <username>! You've successfully authenticated, but GitHub does not provide shell access.则说明认证正常。
内容的提问来源于stack exchange,提问作者Yash Udhlani
相关产品推荐
相关产品推荐

