当前位置: 首页 > 知识库问答 >
问题:

Docker加载密钥“/root/.ssh/id\u rsa”:格式无效

钱京
2023-03-14

我试图克隆一个回购,其中有子模块。主回购是克隆罚款,但当我做git子模块更新-init-递归在dockerfile子模块抛出和错误。

fatal: clone of 'git@github.com:jkeys089/lua-resty-hmac.git' into submodule path '/tmp/third-party/lua-resty-hmac' failed
Failed to clone 'third-party/lua-resty-hmac'. Retry scheduled
Cloning into '/tmp/third-party/lua-resty-jwt'...
load pubkey "/root/.ssh/id_rsa": invalid format
Warning: Permanently added the RSA host key for IP address '140.82.118.3' to the list of known hosts.
Load key "/root/.ssh/id_rsa": invalid format
git@github.com: Permission denied (publickey).

在图像中我有这个

# authorise ssh host
RUN mkdir /root/.ssh/ \
    && chmod 700 /root/.ssh \
    && ssh-keyscan github.com > /root/.ssh/known_hosts

# add key and set permission
RUN echo "${SSH_PRIVATE_KEY}" >> /root/.ssh/id_rsa \
    && echo "$ssh_pub_key" > /root/.ssh/id_rsa.pub \
    && chmod 600 /root/.ssh/id_rsa.pub \
    && chmod 600 /root/.ssh/id_rsa

我无法控制子模块。我不确定是否可以从git@github.com到https以获取子模块。

我甚至尝试使用GITHUB\u令牌route

# start up git and clone
RUN git config --global url."https://${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/" \
    && git clone https://github.com/GluuFederation/gluu-gateway.git /tmp \
    && cd /tmp/ \
    && git submodule update --init --recursive

下面是构建命令的一部分。build--build-argGITHUB_TOKEN=${GITHUB_TOKEN}--build-argSSH_PRIVATE_KEY="$(cat~/. ssh/id_rsa)"--build-argssh_pub_key="$(cat~/. ssh/id_rsa.pub)"

请帮帮忙。这很令人沮丧(

共有3个答案

杨雪松
2023-03-14

不要使用echo"${SSH_PRIVATE_KEY}"

RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa &&     chmod 600 /root/.ssh/id_rsa

这导致了identity file/root/之类的错误。ssh/id\u rsa type-1格式无效读取密码短语:无法打开/dev/tty

正确的方法是使用

COPY id_rsa /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa

解决方案解释道:我的私钥格式错误——不是许多行,而是作为一行传递,你可能会有任何其他格式问题,比如开头或结尾被遗忘的“-”,或者行尾有问题,例如缺少的换行符格式或行尾的附加字母。

请参阅Dockerfile:clone repo with passwordless private key。错误:“authentication agent”或“read_passphrase:can't open/dev/tty”了解更多详细信息,其主要思想是在docker文件中向ssh代理添加私钥,这同样是Gitlab CI/docker的思想:ssh Add不断请求密码。

丁承德
2023-03-14

如果密钥是“无效格式”,请尝试用旧的PEM格式重新生成它。

ssh-keygen -m PEM -t rsa -P "" 

请确保将公钥添加到GitHub帐户以进行正确的身份验证。

OP Shammir在评论中补充道:

我认为问题在于,在构建期间,没有任何东西从主机复制到docker映像。

在“docker build--build arg SSH_PRIVATE_KEY=“$(cat~/.SSH/id_rsa)”返回空”中,Shammir使用dockito/vault来管理私钥,但也将其配置为“addkeystagent”:如果私钥没有密码保护(如上面的命令所示),则不需要此功能

舒博雅
2023-03-14

另一个可能的问题是,如果您使用Makefile来运行docker构建命令。在这种情况下,Makefile中的命令看起来像:

docker-build:
    docker build --build-arg SSH_PRIVATE_KEY="$(shell cat ~/.ssh/id_rsa)"

Make不幸地用空格替换了换行符(makeshell)

这意味着写入容器的ssh密钥具有不同的格式,从而产生上述错误。

我无法找到在Makefile命令中保留换行符的方法,所以我求助于复制命令的解决方法。ssh目录到docker构建上下文中,通过Dockerfile复制文件,然后删除它们。

 类似资料:
  • 我正在使用GitLab为我的django项目构建CI/CD。作为我部署阶段的一部分,我有 构建在ssh add ~/处崩溃。ssh/id\u rsa

  • 我无法控制子模块。我不确定是否可以从更改为https来获取子模块。 我甚至尝试使用路由 下面是build命令的部分。

  • 我有一个dockerfile: 但当我尝试用最新的docker版本构建它时,我得到了以下错误: 谁能告诉我,我应该如何修复这个dockerfile?谢谢!!

  • 我使用PuTTY密钥生成器生成了一个4096位RSA-2密钥,其中包含一个密码短语。 我保存了. ppk和一个openSSL格式的公钥。油灰格式公钥不起作用。 无论如何,我的错误如下: 有什么问题吗? 我使用Pageant来加载密钥,我使用Git Bash来尝试ssh连接。我也把密钥加载到GitHub,不知道我做错了什么。 我尝试在GitHub中添加新行,但没有添加新行

  • 有什么建议吗?我试图用puttygen转换我的钥匙,但仍然不起作用!我的pub密钥的开头是ssh rsa密钥。。私钥:--开始OPENSSH私钥--。。键--结束OPENSSH私钥--

  • 我正在使用ionic开发一个android应用程序。我用一个新的密钥库错误地给我的应用程序签名。当我将应用程序上传到PlayStore时发现证书不相等时,我使用了与PlayStore中所需证书相同的备份keystore文件。 现在,如果我想用命令对我的。apk进行jarsign 我得到以下错误 我谷歌了很多,但我不确定是否有任何解决方案可以帮助我。我必须使用我的旧证书,不能使用一个新的,因为我不能