docker:SSH直接访问容器

时间:2014-09-11 09:04:28

标签: linux ssh virtualization docker

到目前为止,我们使用了几个linux用户:

  • system_foo @服务器
  • system_bar @服务器
  • ...

我们希望将系统用户置于docker容器中。

  • linux用户system_foo - >容器system_foo

服务器内部的更改没有问题,但远程系统使用这些用户向我们发送数据。

我们需要让ssh system_foo@server工作。远程系统无法更改。

如果每个linux操作系统只有一个系统(将端口22传递到容器),我会很容易的。但有几个。

我们如何从旧方案更改为docker容器并保持服务ssh system_foo@server可用而无需在远程站点进行更改?

如果您不理解这个问题,请发表评论。谢谢。

4 个答案:

答案 0 :(得分:4)

但是请记住,在容器中使用ssh支持通常是一种反模式(除非它只是你的容器'关注',但接下来是什么才能ssh。请参阅http://techblog.constantcontact.com/devops/a-tale-of-three-docker-anti-patterns/有关该反模式的信息

答案 1 :(得分:2)

nsenter 可以为您效劳。首先 ssh 到主机,然后 nsenter 到容器。

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)`
nsenter --target $PID --mount --uts --ipc --net --pid

来源 http://jpetazzo.github.io/2014/06/23/docker-ssh-considered-evil/

答案 2 :(得分:1)

根据评论判断,您可能正在寻找像dockersh这样的解决方案。 dockersh用作登录shell,并允许您将登录到您的实例的每个用户放入一个隔离的容器中。

这可能不会让你使用sftp

请注意dockersh在自述文件中包含安全警告,您当然希望查看这些警告:

  

警告:虽然此项目试图将用户置于容器内   降低了权限并降低了限制用户能力的能力   为了升级他们的特权级别,不一定完全   安全。值得注意的是,当Docker添加用户命名空间支持时,可以这样做   用于进一步锁定权限。

答案 3 :(得分:1)

几个月前,我帮这样做了。这不好,但有效。但 需要使用pub-key auth。

通过command

中的.ssh/authorized_keys调用的脚本
#!/usr/bin/python
import os
import sys
import subprocess
cmd=['ssh', 'user@localhost:2222']
if not 'SSH_ORIGINAL_COMMAND' in os.environ:
    cmd.extend(sys.argv[1:])
else:
    cmd.append(os.environ['SSH_ORIGINAL_COMMAND'])
sys.exit(subprocess.call(cmd))

file system_foo @ server:.ssh / authorized_keys

command="/home/modwork/bin/ssh-wrapper.py" ssh-rsa AAAAB3NzaC1yc2EAAAAB...

如果远程系统执行ssh system_foo@server server处的SSH守护程序执行.ssh/authorized_keys中给出的命令。此命令对不同的ssh-daemon执行ssh。

在docker容器中,需要运行侦听端口2222的ssh-daemon。