我希望有一个服务器可以透明地将传入的ssh连接从客户端转发到码头容器。这应该包括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连接中,用户必须输入他们的密码,因为身份验证没有通过( server没有user的私钥)。此外,即使输入密码,这种方法也不适用于scp。
我也听说过tunnel=命令,但是我不知道如何设置它(而且这个命令不太有用)。
我在Arch上使用OpenSSH 7.5p1。
发布于 2017-07-12 17:37:42
将其放入您的~/.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发布于 2017-07-13 12:23:03
这就是我现在想出的解决办法。我对第二个键有点不满意,因为它的公开部分在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,该密钥仅适用于特定的auth。我有点担心,您可以通过注入一些命令来摆脱command=,但到目前为止,我还没有发现允许出现的置换。
由于传递了$SSH_ORIGINAL_COMMAND,您甚至可以执行scp和ssh-copy-id等操作。
注意:为了不允许ssh-copy-id (因为其他原因我想要),只需在容器中使authorized_keys不能为user写。
https://stackoverflow.com/questions/45063164
复制相似问题