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

时间:2019-05-01 14:56:20

标签: 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,该用户U具有相同的groupID和userID,然后尝试以该用户身份登录后从C1 ssh'ing,但这没用。

我不确定是否将私有密钥从正在运行的主机复制到容器映像中,是否符合docker / vms的最佳做法。

1 个答案:

答案 0 :(得分:0)

好的,根据问题的评论,我建议以下内容。

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