我想要一个服务器来透明地将传入的 ssh 连接从客户端转发到 docker 容器。这应该包括 scp、git 传输等。这必须使用 key ,密码已停用。用户不应看到服务器。 更新:是的,这确实意味着用户应该不知道有一个服务器。配置必须完全在服务器上进行!
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 连接中用户必须输入密码,因为身份验证未通过(服务器 没有用户 的私钥)。 此外,即使输入密码,这种方法也不适用于 scp。
我也听说过 tunnel= 命令,但我不知道如何设置它(联机帮助页也没什么帮助)。
我在 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




