Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
透明ssh连接转发到docker容器_Docker_Ssh_Forwarding_Authorized Keys - Fatal编程技术网

透明ssh连接转发到docker容器

透明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

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

因此,给出的是:

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代理?