透明ssh连接转发到docker集装箱

我想要一个服务器透明地将来自客户端的传入SSH连接转发到docker集装箱。 这应该包括scp,git transport等等。 这必须使用密钥,密码被停用。 用户不应该看到服务器。 更新:是的,这实际上意味着用户应该不知道有一台服务器。 configuration必须完全在服务器上进行!

client -----> server -----> container (actual connection) client -------------------> container (what the user should see) 

那么,给出的是:

 user@client$ ssh user@server user@server$ ssh -p 42 user@localhost user@container$ 

但是我想要的是这样的:

 user@client$ ssh user@server user@container$ 

我尝试在authorized_keys文件中使用command="ssh -p 42 user@localhost"语法,这是有点用的,只是在第二个ssh连接中用户必须input密码,因为身份validation没有通过( server没有' t有user的私钥)。 此外,即使input密码,这种方法也不适用于scp

我也听说过tunnel=命令,但是我不知道如何设置它(并且manpage不太有用)。

我在Arch上使用OpenSSH 7.5p1。

把它放在~/.ssh/config文件中:

 Host server-container ProxyCommand ssh server -W localhost:42 

然后简单地做:

 ssh server-container 

只要你的用户名是一致的。 如果没有,你可以这样指定它们:

 Host server-container ProxyCommand ssh server-user@server -W localhost:42 

然后简单地做:

 ssh container-user@server-container 

作为奖励,您可以避免使用ssh使用docker exec进入容器。 喜欢这个:

 ssh -t server docker exec -it <container-id> bash 

这是我现在提出的解决scheme。 我对第二个键感到有点不高兴,因为它的公共部分将在container~/.ssh/authorized_keys可见,这很容易破坏透明性,但除此之外,其他所有的东西似乎都可以工作。

 user@server$ cat .ssh/authorized_keys command="ssh -q -p 42 user@localhost -- \"$SSH_ORIGINAL_COMMAND\"",no-X11-forwarding ssh-rsa <KEYSTRING_1> user@server$ cat .ssh/id_rsa.pub <KEYSTRING_2> user@container$ cat .ssh/authorized_keys ssh-rsa <KEYSTRING_2> 

client使用其私钥对server进行授权。 然后,服务器使用专用密钥跳到container ,该专用密钥仅用于该特定身份validation。 我有点担心你可以通过注入一些命令来突破命令,但是到目前为止,我还没有发现任何可以突破的排列方式。
由于传递$SSH_ORIGINAL_COMMAND ,你甚至可以做scpssh-copy-id等等。

注意:要禁止ssh-copy-id (我想要其他原因),只需将authorized_keys不可写入容器内的user