Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
Linux docker:SSH直接访问容器_Linux_Ssh_Virtualization_Docker - Fatal编程技术网

Linux docker:SSH直接访问容器

Linux docker:SSH直接访问容器,linux,ssh,virtualization,docker,Linux,Ssh,Virtualization,Docker,到目前为止,我们使用了几个linux用户: 系统_foo@server 系统_bar@server 我们希望将系统用户放入docker容器中 PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)` nsenter --target $PID --mount --uts --ipc --net --pid linux用户system\u-foo-->容器system\u-foo 服务器内部的

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

  • 系统_foo@server
  • 系统_bar@server
我们希望将系统用户放入docker容器中

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)`
nsenter --target $PID --mount --uts --ipc --net --pid
  • linux用户
    system\u-foo
    -->容器
    system\u-foo
服务器内部的更改不是问题,但远程系统使用这些用户向我们发送数据

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

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

我们如何从旧的方案更改为docker容器并保持服务
ssh系统_foo@server
在远程站点上无需更改即可使用


如果你不明白这个问题,请留下评论。谢谢。

根据评论判断,您可能正在寻找类似的解决方案
dockersh
用作登录shell,允许您将登录到实例的每个用户放置到一个独立的容器中

不过,这可能不允许您使用
sftp

请注意,
dockersh
在其自述文件中包含安全警告,您一定要查看:

警告:当此项目试图使用户进入容器时 降低权限并删除功能以限制用户的权限 要提升他们的权限级别,不一定要完全升级 保护值得注意的是,当Docker添加了用户名称空间支持时,这可以是 用于进一步锁定特权


几个月前,我这样帮助我的朋友。这不好,但很管用。但是 需要使用发布密钥身份验证

通过
.ssh/authorized_key
中的
命令调用的脚本

#!/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))
文件系统_foo@server:.ssh/authorized_密钥

command="/home/modwork/bin/ssh-wrapper.py" ssh-rsa AAAAB3NzaC1yc2EAAAAB...
如果远程系统没有
ssh系统_foo@server
服务器上的SSH守护进程执行
中给出的comand命令。此命令对不同的ssh守护进程执行ssh


在docker容器中,需要运行侦听端口2222的ssh守护程序。

nsenter可能适合您。首先ssh到主机,然后nsenter到容器

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

source

但是,让我们记住,在容器中支持ssh通常是一种反模式(除非这只是您的容器的“问题”,但是能够ssh进入有什么意义。请参阅以了解有关反模式的信息,因此您希望每个连接使用一个容器?您不能在用户在
etc/passwd
中shell时配置
docker run
?我的回答正确吗?:您想创建一个虚拟Mac吗hine-like环境。这样每个用户都有自己的容器(VM),用户可以通过ssh进入其中并做任何想做的事情。@ZeissS是的,也许在
/etc/passwd
中使用一个简单的包装器脚本就足够了。我需要调查端口转发和子策略sftp是否也起作用。谢谢您的“回答”@beginer是的,ssh到帐户在我们内部更改之前是允许的,在我们内部更改之后应该是允许的。看来ssh和docker不应该一起使用:是的,这是一种反模式。这就是为什么我们在本例中不使用docker的原因。