在没有 openssh-client 设置的情况下从容器到远程主机的 ssh

ssh from container to remote host without openssh-client setup

我有一个场景,其中主机 H1 运行宁一个 docker 容器 C1 和主机 H2(在同一网络内)运行宁一个 docker 容器C2。 H1 和 H2 之间的 SSH 是使用 public-key 身份验证设置的。我的用例是能够通过从 C1 调用命令来 运行 C2 上的脚本。我可以通过在 C1 (openssh-client) 上设置 ssh 来实现这一点,这涉及将私钥从 H1 复制到 C1 上的 .ssh 目录,为其分配适当的权限,然后 运行ning ssh -t H2 docker exec C2 sh <script_name>.

有没有办法不用在C1中设置ssh客户端就可以实现?

我尝试在 C1 中创建与拥有私钥的 H1 相同的用户 U,具有相同的组 ID 和用户 ID,然后在以该用户身份登录后尝试从 C1 ssh,但这没有用。

我不确定将私钥从 运行ning 主机复制到容器映像是否符合 dockers/vms 的最佳实践。

好的,根据问题的评论,我建议如下。

首先,您肯定需要一些容器可以以某种方式使用的 private/public 密钥对。没有这个,SSH 显然是行不通的。

但是,您可以将 SSH_AUTH_SOCK 环境变量从主机装载到安装了 SSH 客户端的容器中,而不是将私钥复制到容器中。如果您的主机被授权连接到您的目标,那么容器也将被授权。最小示例:

docker run --rm -it -v $SSH_AUTH_SOCK:/ssh-agent -e "SSH_AUTH_SOCK=/ssh-agent" --entrypoint sh panubo/sshd -c "ssh -o StrictHostKeyChecking=no [REMOTE_MACHINE_IP]"