到目前为止,我们使用了几个linux用户:
我们希望将系统用户置于docker容器中。
system_foo
- >容器system_foo
服务器内部的更改没有问题,但远程系统使用这些用户向我们发送数据。
我们需要让ssh system_foo@server
工作。远程系统无法更改。
我们如何从旧方案更改为docker容器并保持服务ssh system_foo@server
可用而无需在远程站点进行更改?
如果您不理解这个问题,请发表评论。谢谢。
答案 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。