git 在Fedora中使用Podman将ssh代理转发到容器

xv8emn3q  于 2023-05-21  发布在  Git
关注(0)|答案(1)|浏览(131)

我正在创建一个podman镜像,我试图了解如何允许容器使用我的主机(Fedora 37)ssh-agent,以便容器可以克隆git仓库。我宁愿这样做,而不是使用PAT或其他我能想到的解决方案。
我举了一个非常简单的例子:

  • 应用程序 * foo
#!/bin/bash -eux
git clone "$REPO"

Dockerfile

FROM docker.io/fedora:39@sha256:531209ee9007c2bf909c6548b0456524bde9da0a1ac95ecc67bf3b98e9046969 
ARG HOST
RUN dnf install -yq git
WORKDIR /app
COPY foo foo
ENV PATH="${PATH}:/app"
RUN useradd -m user && mkdir -p /home/user/.ssh && chown -R user:user /home/user/.ssh
WORKDIR /home/user
RUN printf "Host $HOST\n\tStrictHostKeyChecking no\n" >> .ssh/config
USER user
ENTRYPOINT ["foo"]

然后我创建图像:

podman build -t foo --build-arg HOST=$HOST .

并尝试运行它:

$ podman run -it -v $SSH_AUTH_SOCK:$SSH_AUTH_SOCK:Z -e SSH_AUTH_SOCK=$SSH_AUTH_SOCK -eREPO=$REPO foo

 + git clone git@*********.git

...
*****: Permission denied (publickey).
fatal: Could not read from remote repository.

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

如果我用--entrypoint /bin/bash运行容器并执行ssh-add -L,我会得到:

[user@42e1646bd254 ~]$ ssh-add -L
Could not open a connection to your authentication agent.

我注意到容器中的“$SSH_AUTH_SOCK”目录由root所有:

[user@246199390bfe ~]$ stat $SSH_AUTH_SOCK
  File: /run/user/1000/keyring/ssh
  Size: 0               Blocks: 0          IO Block: 4096   socket
Device: 0,68    Inode: 81          Links: 1
Access: (0755/srwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-03-19 07:28:45.436018916 +0000
Modify: 2023-03-18 06:20:31.860105581 +0000
Change: 2023-03-19 10:17:03.933082078 +0000
 Birth: 2023-03-18 06:20:31.860105581 +0000

通过阅读文档,我了解到podman在容器内以 root 身份运行,但会Map到容器外的用户(或类似的东西)。所以我尝试将我的Dockerfile改为使用root而不是user

FROM docker.io/fedora:39@sha256:531209ee9007c2bf909c6548b0456524bde9da0a1ac95ecc67bf3b98e9046969 
ARG HOST
RUN dnf install -yq git
WORKDIR /app
COPY foo foo
ENV PATH="${PATH}:/app"
RUN mkdir -p /root/.ssh
WORKDIR /root
RUN printf "Host $HOST\n\tStrictHostKeyChecking no\n" >> .ssh/config
ENTRYPOINT ["foo"]

重新构建,然后尝试类似的东西:

podman run -it -v $SSH_AUTH_SOCK:/root/keyring:Z -e SSH_AUTH_SOCK=/root/keyring -eREPO=$REPO foo

但我还是得到了一个Permission denied (publickey).
我已经检查了主机中的stat $SSH_AUTH_SOCK包含Context: system_u:object_r:container_file_t:s0:c235,c239(因此我相信:Z选项可以正常工作)。
谁能帮我弄明白我做错了什么?
在Fedora上使用Podman 4.4.2。

更新

我卸载了podman并安装了docker-ce,它在第一次尝试时工作(尝试了修改后的Dockerfile)。
不过我还是更喜欢住在Podman酒店。

cbjzeqam

cbjzeqam1#

我也曾遇到过这个问题,但我找到了解决办法。
关键是在您的运行中添加--privileged(现在让我们先不考虑安全性问题)
下面是我的Dockerfile:

FROM fedora:37

RUN dnf install -yq git && dnf clean all
RUN mkdir -p .ssh
RUN printf "Host *\n\tStrictHostKeyChecking no\n" >> .ssh/config
ENTRYPOINT ["/bin/bash"]

使用以下内容构建:

podman build -t foo:temp

并运行以下运行:

$ podman run -it -v $SSH_AUTH_SOCK:$SSH_AUTH_SOCK:Z -e SSH_AUTH_SOCK=$SSH_AUTH_SOCK --privileged foo:temp -c "ssh -T git@github.com"
The authenticity of host 'github.com (140.82.113.4)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Hi op-jenkins! You've successfully authenticated, but GitHub does not provide shell access.

Idk为什么StrictHostKeyChecking no不工作,但一旦你只说是,它可以做ssh事务。
我也尝试了--cap-add ALL,但不知何故失败了:

$ podman run -it -v $SSH_AUTH_SOCK:$SSH_AUTH_SOCK:Z -e SSH_AUTH_SOCK=$SSH_AUTH_SOCK --cap-add ALL foo:temp -c "ssh -T git@github.com"
The authenticity of host 'github.com (140.82.112.4)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
git@github.com: Permission denied (publickey).

当我在ssh -vT git@github.com中打开-v选项时,沿着调试消息,我确实发现了这个错误:

debug1: pubkey_prepare: ssh_get_authentication_socket: Permission denied

所以通过cap-add添加所有的linux权限并不足以获得权限。
我觉得在做--privileged的时候有一些安全提升,但我不是Maven。在我的主机中,我们启用了SELinux……所以这可能也是一个因素idk。
但希望这有帮助。

相关问题