透明ssh连接转发到docker容器
我希望有一个服务器将传入的ssh连接从客户端透明地转发到docker容器。这应该包括scp、git传输等。这必须与密钥一起使用,密码将被禁用。用户不应该看到服务器。更新:是的,这确实意味着用户不知道有服务器。配置必须完全在服务器上进行 因此,给出的是:透明ssh连接转发到docker容器,docker,ssh,forwarding,authorized-keys,Docker,Ssh,Forwarding,Authorized Keys,我希望有一个服务器将传入的ssh连接从客户端透明地转发到docker容器。这应该包括scp、git传输等。这必须与密钥一起使用,密码将被禁用。用户不应该看到服务器。更新:是的,这确实意味着用户不知道有服务器。配置必须完全在服务器上进行 因此,给出的是: user@client$ ssh user@server user@server$ ssh -p 42 user@localhost user@container$ 但我想要的是: user@client$ ssh user@server u
user@client$ ssh user@server
user@server$ ssh -p 42 user@localhost
user@container$
但我想要的是:
user@client$ ssh user@server
user@container$
我尝试使用命令=“ssh-p42user@localhost“
在授权密钥
文件中的语法有点有效,只是在第二个ssh连接中,用户必须输入密码,因为身份验证没有通过(服务器
没有用户
的私钥)。
此外,即使输入密码,这种方法也不适用于scp
我还听说了tunnel=
命令,但我不知道如何设置它(手册页没有什么帮助)
我正在Arch上使用OpenSSH 7.5p1。将其放入
~/.ssh/config
文件:
Host server-container
ProxyCommand ssh server -W localhost:42
然后简单地做:
ssh server-container
ssh container-user@server-container
只要你的用户名是一致的。如果不是,则可以将其指定为:
Host server-container
ProxyCommand ssh server-user@server -W localhost:42
然后简单地做:
ssh server-container
ssh container-user@server-container
作为奖励,您可以避免使用ssh使用
docker exec
进入容器。像这样:
ssh -t server docker exec -it <container-id> bash
ssh-t服务器docker exec-it bash
这就是我现在想到的解决方案。我对第二个密钥有点不满意,因为它的公共部分将在容器的~/.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>
user@server$cat.ssh/authorized_密钥
command=“ssh-q-p 42user@localhost--“$SSH\u原始\u命令\”,无X11-转发SSH rsa
user@server$cat.ssh/id_rsa.pub
user@container$cat.ssh/authorized_密钥
ssh-rsa
客户端
使用其私钥对服务器
进行授权。然后服务器跳转到容器
,其中有一个专用密钥,该密钥仅用于该特定身份验证。我有点担心通过注入一些命令可以突破command=
,但到目前为止,我还没有发现允许突破的排列。
由于传递了$SSH\u ORIGINAL\u命令
,您甚至可以执行scp
和SSH copy id
等操作
注意:为了禁止ssh copy id
,我出于其他原因想要它,只需将authorized_key
设置为容器内的user
不可写。如我所说,它必须配置为服务器端。客户端不是恶意的,但是。。。我该怎么说。。。没有足够的能力。Iptables?还是ssh代理?