透明的ssh连接转发到docker容器

时间:2017-07-12 16:30:00

标签: docker ssh forwarding authorized-keys

我想让服务器透明地将传入的ssh连接从客户端转发到docker容器。这应该包括scp,git传输等。这必须与密钥一起使用,密码被停用。用户不应该看到服务器。 更新:是的,这实际上意味着用户应该不知道有服务器。配置必须完全在服务器上进行!

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$ 

我尝试在command="ssh -p 42 user@localhost"文件中使用authorized_keys语法,这种方式有效,只是在第二个ssh连接中,用户必须输入密码,因为身份验证未通过({{ 1}}没有server的私钥。 此外,即使输入密码,此方法也不适用于user

我也听说过scp命令,但我不知道如何设置它(并且联机帮助页不太有用)。

我在Arch上使用OpenSSH 7.5p1。

2 个答案:

答案 0 :(得分:1)

将其放入~/.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

答案 1 :(得分:0)

这是我现在提出的解决方案。我对第二个键有点不满意,因为它的公共部分会在container的{​​{1}}中显示,这会略微破坏透明度,但除此之外其他所有东西似乎都有效。< / p>

~/.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,但到目前为止,我没有发现可以突破的排列。
由于通过了command=,您甚至可以$SSH_ORIGINAL_COMMANDscp等等。

注意:要禁止出于其他原因我想要的ssh-copy-id,只需在容器内为ssh-copy-id设置authorized_keys不可写。