尽pipe存在SSH证书,Git克隆仍然不能在Docker内部工作

我试图克隆一个存储库到一台机器的图像,我成功地能够使用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/* 

我已经validation传入的参数是通过使用回声debugging使其与本地计算机上的这些字段具有相同的值。 此外,运行git clone ssh://git@bitbucket.example.com/my-repo.git在机器上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'获得所有的环境variables

事实certificate,有一个与我的密钥对相关的密码。 它不会问我在docker集装箱外的密码,但会在docker集装箱内。 原因是我的ssh-key已经被解锁,并且通过我的发行版(通过ssh-add -l可以看到),通过ssh-add -l加载到ssh-agent

如果ssh-add -l没有find任何结果,那么仍然有可能存在与密钥相关的密码。 这是我的情况。 确保最好的方法是检查rsa_id private key文件(详情如下)。

在编译期间,由于没有提供密码,它只是立即失败的GIT拉,但没有提供详细的错误信息。 一旦我生成一个没有关联密码的id_rsa keypair ,并使用它,我能克隆到docker构build。

要检查密码保护是否是问题,您可以比较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----- 

虽然那些不受保护的缺less包含Proc-Type:4,ENCRYPTED等的二至四行的行

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