我在/etc/hosts
中定义了一个名为web1
的主机。
有一个名为store
的docker容器。
在我的工作站上,我可以进入机器并执行命令以交互方式输入容器
ssh -t -t web1 docker exec -ti store /bin/bash
它正确地将我直接放入容器中,正如我所希望的那样。
但是,我真的想要定义一个名为store
的伪主机并使用~/.ssh/config
在我的ProxyCommand
文件中设置它,这样我就可以使用ssh store
Host store
ProxyCommand ssh -t -t web1 docker exec -ti store /bin/bash
但它失败并出现以下错误:
Bad packet length 218958363.
ssh_dispatch_run_fatal: Connection to UNKNOWN: message authentication code incorrect
Killed by signal 1.
如果我为某些调试添加了-v,那么上面的块之前的最后两行是
debug1: Authenticating to store:22 as 'user1'
debug1: SSH2_MSG_KEXINIT sent
ssh
进入store
容器而不是仅执行抛出该错误的命令,这是正确的吗?如果不是什么问题?ssh-store
的别名还有其他选项吗?最终目标是定义一个虚拟主机,我只能说ssh store
并将其放在store
上的web1
容器中。
编辑:
解决方案:
正如Jakuje指出的那样,使用带有ssh的ProxyCommand不会允许非ssh进一步命令。因此,我只是使用别名并可能使用bash函数来实现它。我已经设置了两个。
根据Jakuje在〜/ .ssh / config
中的推荐Host web1
RequestTTY yes
在中
alias ssh-store="ssh web1 docker exec -ti store /bin/bash"
所以我可以做ssh-store
并最终进入容器
或〜/ .bashrc
function ssh-web1 { ssh web1 docker exec -ti $1 /bin/bash; }
所以我可以做ssh-web1 store
并最终进入容器
答案 0 :(得分:0)
我认为它正在尝试ssh进入商店容器,而不是只执行抛出该错误的命令,这是正确的吗?如果不是什么问题?
是
有没有办法使用ProxyCommand执行此操作而不尝试ssh到容器中,而只是使用docker exec?
没有。它没有这种方式。 ProxyCommand
期望另一步也是SSH会话,而不是直接bash提示。
将ssh设置到容器中是否容易?我们目前不是这样做的。
我认为这是不必要的开销。但这可能是围绕这里的许多其他问题所描述的。
至少可以通过在-t -t
中指定RequestTTY
来摆脱~/.ssh/config
。但其余的必须是bash别名或函数(如果你有更多主机function更合适)。
function ssh-docker {
ssh web1 docker exec -ti $1 /bin/bash
}
然后无论像这样的容器都可以调用它:
ssh-docker store
您只需将此功能存储到.bashrc
或存储别名的位置。