尽管存在 SSH 凭据,但 Git 克隆无法在 Docker 构建中工作

标签 git docker ssh bitbucket

我正在尝试将存储库从可以成功使用 SSH 克隆 Docker 构建之外的存储库的机器中克隆到镜像中。但是,每次我尝试克隆存储库时,我都会以以下借口被拒绝:

Cloning into 'my-repo'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

这是我的 Dockerfile:
FROM ubuntu as my-repo

ARG GIT_SSH_KEY
ARG GIT_SSH_PUBLIC_KEY
ARG KNOWN_HOSTS

RUN apt-get update
RUN apt-get install -y git ssh

# populate id_rsa files, populate known_hosts and config files, and manage permissions
RUN mkdir ~/.ssh/ && \
    chmod 700 ~/.ssh && \
    touch ~/.ssh/id_rsa && \
    touch ~/.ssh/id_rsa.pub && \
    chmod 600 ~/.ssh/id_rsa && \
    chmod 600 ~/.ssh/id_rsa.pub && \
    touch ~/.ssh/known_hosts && \
    touch ~/.ssh/config && \
    chmod 600 ~/.ssh/known_hosts && \
    chmod 600 ~/.ssh/config && \
    echo "${GIT_SSH_KEY}" > ~/.ssh/id_rsa && \
    echo "${GIT_SSH_PUBLIC_KEY}" > ~/.ssh/id_rsa.pub && \
    echo "${KNOWN_HOSTS}" > ~/.ssh/known_hosts && \
    echo "Host bitbucket.example.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config && \
    git clone ssh://git@bitbucket.example.com/my-repo.git && \
    rm ~/.ssh/*

我已经通过使用 echo 进行调试,验证了传入的参数与我本地机器上的那些字段的值相同。此外,运行 git clone ssh://git@bitbucket.example.com/my-repo.git在机器上工作正常。

我错过了什么导致权限被拒绝?它声明 publickey 是原因,但 id_rsa.pub已正确填充。

编辑:这是 docker 命令docker build --build-arg GIT_SSH_KEY="$GIT_SSH_KEY" --build-arg GIT_SSH_PUBLIC_KEY="$GIT_SSH_PUBLIC_KEY" --build-arg KNOWN_HOSTS="$KNOWN_HOSTS" -f myRepoDockerfile -t myRepo .
我通过运行诸如KNOWN_HOSTS='cat ~/.ssh/known_hosts'

最佳答案

事实证明,我的 key 对有一个密码。它不会要求我在 docker 容器之外输入密码,但会在 docker 容器内。原因是我的ssh-key已解锁并加载到 ssh-agentssh-add通过我的分布(我可以看到 ssh-add -l )。

如果 ssh-add -l没有出现任何结果,仍然可能存在与 key 关联的密码。我就是这种情况。确定的最好方法是检查 rsa_id private key文件(详情如下)。

在构建过程中,由于没有提供密码,它只是立即使 git pull 失败,但没有给出详细的错误消息。一旦我生成了 id_rsa keypair没有关联密码并使用它,我能够克隆到 docker 构建中。

要检查密码保护是否是问题,您可以比较 rsa_id private key文件,受密码保护的文件如下所示:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,2895AF2DB67AF43E94DF3C097C69B693

YUtMfSyL4xna /* lots of numbers and letters */
-----END RSA PRIVATE KEY-----

而那些不 protected 缺少包含 Proc-Type: 4,ENCRYPTED 等的第二到四行
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAK /* lots of letters and numbers */
-----END RSA PRIVATE KEY-----

关于尽管存在 SSH 凭据,但 Git 克隆无法在 Docker 构建中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47778302/

相关文章:

docker - 使用 docker-compose 的本地 Vault

docker-compose 和用户命名空间

windows - 使用 SSH 的 TortoiseSVN

ssh - SSH错误:权限被拒绝,请重试

mysql - Ruby on Rails - 在 SSH 隧道查询后连接回应用程序数据库

git - 为什么 git add -A 没有添加这些文件?

Git 属性(涂抹、干净)分布在 repo 协议(protocol)上

python - Git 预提交 Hook : getting list of changed files

GIT:提交时为 "fatal: unable to write new_index file"

docker - 在Docker容器中重新运行脚本