docker - 从容器 ssh 到远程主机,无需 openssh-client 设置

标签 docker ssh docker-container

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

有没有办法在 C1 中不设置 ssh 客户端的情况下实现此目的?

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

我不确定将私钥从正在运行的主机复制到容器镜像是否符合 docker/vm 的最佳实践。

最佳答案

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

首先,您肯定需要一些容器可以以某种方式使用的私钥/公钥对。如果没有这个,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]"

关于docker - 从容器 ssh 到远程主机,无需 openssh-client 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55938225/

相关文章:

docker-compose - 使用docker在windows容器中运行exe文件

docker - 尝试将图像转换为容器时,为什么会出现 'docker: invalid reference format'?

python - 容器化 Python 命令行应用程序

nginx - 在 Nginx 中通过主机名动态查找容器的地址

docker - 在Docker中运行的多进程应用程序(例如Postgres)会发生什么情况?

python - 为桌面环境分发 Docker 容器应用程序

linux - ssh 的记录

ssh - 如何使用 SourceTree 配置 Bitbucket 应用程序密码?

来自共享 Gitlab 运行器的 SSH 停止工作

docker - 在主机上运行docker命令