在我的 Dockerfile 中,我尝试从私有存储库中提取 Python 库:
RUN --mount=type=ssh .venv/bin/pip install SOME_LIB --extra-index-url https://example.com/pypi/ -U
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用以下命令运行构建:
docker buildx build --ssh /path/to/the/private/key/id_rsa .
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它给了我以下错误:
#0 0.831 Host key verification failed.
#0 0.831 fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)
我已经仔细检查过私钥是否正确。我错过了任何使用步骤--mount=type=ssh吗?
lar*_*sks 12
该错误与您的私钥无关;这是“主机密钥验证失败”。这意味着ssh无法识别远程主机提供的密钥。它的默认行为是询问是否应该信任主机密钥,并且当在无法交互提示的环境中运行时,它将简单地拒绝该密钥。
您有几种选择来处理这个问题。在以下示例中,我将克隆 GitHub 私有存储库(因此我与 github.com 交互),但对于使用 ssh 连接的任何其他主机,该过程都是相同的。
known_hosts构建映像时注入全局文件。
首先,获取您要连接的主机的主机密钥并将其与您的Dockerfile:
$ ssh-keyscan github.com > known_hosts
Run Code Online (Sandbox Code Playgroud)
配置您的Dockerfile安装位置ssh:
COPY known_hosts /etc/ssh/ssh_known_hosts
RUN chmod 600 /etc/ssh/ssh_known_hosts; \
chown root:root /etc/ssh/ssh_known_hosts
Run Code Online (Sandbox Code Playgroud)
配置 ssh 以信任未知主机密钥:
RUN sed /^StrictHostKeyChecking/d /etc/ssh/ssh_config; \
echo StrictHostKeyChecking no >> /etc/ssh/ssh_config
Run Code Online (Sandbox Code Playgroud)
构建镜像时ssh-keyscan运行:Dockerfile
RUN ssh-keyscan github.com > /etc/ssh/ssh_known_hosts
Run Code Online (Sandbox Code Playgroud)
所有这三个解决方案都将确保 ssh 信任远程主机密钥。第一个选项是最安全的(已知的主机文件只会在ssh-keyscan本地运行时由您显式更新)。最后一个选项可能是最方便的。
| 归档时间: |
|
| 查看次数: |
5737 次 |
| 最近记录: |