Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 从容器到远程主机的ssh,无需openssh客户端设置_Docker_Ssh_Docker Container - Fatal编程技术网

Docker 从容器到远程主机的ssh,无需openssh客户端设置

Docker 从容器到远程主机的ssh,无需openssh客户端设置,docker,ssh,docker-container,Docker,Ssh,Docker Container,我有一个场景,主机H1运行docker容器C1,主机H2(在同一网络中)运行docker容器C2。H1和H2之间的SSH是通过公钥身份验证设置的。我的用例是能够通过调用C1中的命令在C2上运行脚本。我可以通过在C1上设置ssh(openssh client)来实现这一点,这涉及到将私钥从H1复制到C1上的.ssh目录,为其分配适当的权限,然后运行ssh-th2 docker exec C2 sh 有没有一种不用在C1中设置ssh客户端就可以实现这一点的方法 我尝试在C1中创建与H1相同的用户U,

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

有没有一种不用在C1中设置ssh客户端就可以实现这一点的方法

我尝试在C1中创建与H1相同的用户U,该用户拥有私钥,具有相同的groupID和userID,然后在作为该用户登录后尝试从C1进行ssh'ing,但没有成功


我不确定从运行的主机将私钥复制到容器映像是否是dockers/VM的最佳做法。

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

首先,您肯定需要一些私有/公共密钥对,容器可以以一种或另一种方式使用这些密钥对。没有这一点,SSH显然无法工作

但是,您可以将
SSH\u AUTH\u 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]"

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

首先,您肯定需要一些私有/公共密钥对,容器可以以一种或另一种方式使用这些密钥对。没有这一点,SSH显然无法工作

但是,您可以将
SSH\u AUTH\u 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]"

您的目标是防止在任何容器中设置SSH客户端还是仅针对C1?是的,我希望避免为所有容器设置SSH客户端。好的,这是不可能的–对于SSH,您需要在某处安装SSH客户端。如果您可以避免将私钥复制到容器中,或者安装SSH客户端的次数过多,这对您是否足够?我愿意在容器上安装SSH客户端,但希望避免将私钥复制到容器中,这是设置SSH客户端的必要步骤。有没有办法做到这一点?您的目标是防止在任何容器中设置SSH客户端,还是仅为C1设置SSH客户端?是的,我希望避免为所有容器设置SSH客户端。好的,这是不可能的–对于SSH,您需要在某处安装SSH客户端。如果您可以避免将私钥复制到容器中,或者安装SSH客户端的次数过多,这对您是否足够?我愿意在容器上安装SSH客户端,但希望避免将私钥复制到容器中,这是设置SSH客户端的必要步骤。有没有办法做到这一点?谢谢!这种方法有效!我正在使用docker compose运行容器,必须按如下方式编辑我的.yml文件:
环境:-SSH\u AUTH\u SOCK=/SSH代理卷:-“${SSH\u AUTH\u SOCK}:/SSH代理”命令:eval“SSH代理-s/”&&SSH add~/.SSH/id\u rsa
谢谢!这种方法有效!我正在使用docker compose运行容器,必须按如下方式编辑我的.yml文件:
环境:-SSH\u AUTH\u SOCK=/SSH代理卷:-“${SSH\u AUTH\u SOCK}:/SSH代理”命令:eval“SSH代理-s/”&&SSH add~/.SSH/id\u rsa