繁体   English   中英

docker:SSH直接访问容器

[英]docker: SSH access directly into container

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

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

我们希望将系统用户放入docker容器中。

  • linux user system_foo - > container system_foo

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

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

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

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

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

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

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/

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

这可能不会让你使用sftp

请注意, dockersh在其README中包含安全警告,您肯定希望查看这些警告:

警告:虽然此项目试图使容器内的用户降低权限并降低功能以限制用户升级其权限级别的能力,但不确定是否完全安全。 值得注意的是,当Docker添加用户命名空间支持时,可以使用它来进一步锁定权限。

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

.ssh/authorized_keys通过command调用的脚本

#!/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的SSH守护程序在server执行中给出的COMAND .ssh/authorized_keys 此命令对不同的ssh-daemon执行ssh。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM