1

我已经安装了 docker ( version 0.11.1-dev, build 02d20af/0.11.1); 似乎是 CentOS 7 的最新可用(yum update docker说没有更新)。

根据jhipster 站点上的安装说明,我提取了当前映像并运行:

sudo docker run -v ~/jhipster:/jhipster -p 8080:8080 -p 9000:9000 -p 4022:22 -t --name jhipster jdubois/jhipster-docker

图像运行正常。但是我无法通过ssh连接。如果我使用详细选项运行ssh :

ssh -vv -p 4022 jhipster@localhost

我得到:

OpenSSH_6.4, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 51: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [::1] port 4022.
debug1: Connection established.
debug1: identity file /home/normunds/.ssh/id_rsa type 1
debug1: identity file /home/normunds/.ssh/id_rsa-cert type -1
debug1: identity file /home/normunds/.ssh/id_dsa type -1
debug1: identity file /home/normunds/.ssh/id_dsa-cert type -1
debug1: identity file /home/normunds/.ssh/id_ecdsa type -1
debug1: identity file /home/normunds/.ssh/id_ecdsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.4
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6p1 Ubuntu-2ubuntu1
debug1: match: OpenSSH_6.6p1 Ubuntu-2ubuntu1 pat OpenSSH*
debug2: fd 3 setting O_NONBLOCK
debug1: SSH2_MSG_KEXINIT sent
Connection closed by ::1

如果我尝试访问另一个 Ubuntu 主机,我会收到相同的序列(除了主机、端口和 OpenSSH 版本),但不是“连接关闭”的最后一行,而是:

debug1: SSH2_MSG_KEXINIT received

并最终成功连接。

我试图通过localhost:4022ip-of-container:22连接;从具有相同结果的本地或远程主机。

所以问题似乎出在容器或 docker 中(或最终在 docker 中的 ubuntu 设置)。但是docker top jhipster显示sshd正在运行,并且 - 是的,跟踪显然表明我到达了ssh服务器。

有任何想法吗?

编辑后我运行了 docker image,使其进入命令行,然后在调试模式下运行sshd :

sudo docker run -v ~/projects:/jhipster -p 8080:8080 -p 9000:9000 -p 4022:22 -t -i --name jhipster jdubois/jhipster-docker /bin/bash

/usr/sbin/sshd -d

为了进一步调试。在连接尝试时sshd失败并显示:

chroot("/var/run/sshd"): 不允许操作 [preauth]

4

1 回答 1

1

1)ssh访问

CentOS 7 看起来问题是CentOS 7存储库只有一个旧的 Docker 版本;CentOS 6Ubuntu都使用 1.1.2 版本。CentOS 7上的问题可以通过使用命令行选项运行图像(如 OP 的编辑部分)然后运行来绕过:

sed 's/UsePrivilegeSeparation yes/UsePrivilegeSeparation no/' -i /etc/ssh/sshd_config

/usr/sbin/sshd

CentOS 6 在运行Docker 1.1.2 的CentOS 6 中测试时,我没有遇到同样的问题(ssh连接更远,因此我假设CentOS 7上的错误是由Docker版本引起的),但是ssh连接后立即断开连接客户端pam 会话未打开和容器端PAM 上的错误: pam_open_session(): Cannot make/remove an entry for the specified session

在这里,它看起来与带有 ssh 登录问题 #5663 的 [FIXED] ubuntu 14.04 容器有关。即使它被标记为“固定”。无论如何,我尝试过的线程中提到的解决方案之一足以解决我的ssh连接问题:

sed '/pam_loginuid.so/s/^/#/g' -i /etc/pam.d/*

看来,它也足以运行:

sed 's/UsePAM 是/UsePAM 否/' -i /etc/ssh/sshd_config

相反,但我没有尝试这个选项。

结论: CentOS 上的ssh连接可以通过使用命令行运行映像来修复

sudo docker run -v ~/projects:/jhipster -p 8080:8080 -p 9000:9000 -p 4022:22 -t -i --name jhipster jdubois/jhipster-docker /bin/bash

然后是上面讨论的 CentOS 6/CentOS 7 的不同“修复”,然后

/usr/sbin/sshd

2)此时我们可能会问:“为什么要使用 ssh ”?一旦我们到达命令行,我们需要做的就是:

su jhipster
cd /jhipster
yo jhipster

正确的?几乎是这样,但这里我们还有另一个问题。在两个CentOS版本上再次不同。如果我们通过ssh连接,它也存在。

在使用旧Docker版本的CentOS 7上,我们需要修改主机目录的selinux上下文(在我们的例子中为 ~/jhipster):

chcon -Rt svirt_sandbox_file_t ~/jhipster

CentOS 6上,这不是必需的(并且svirt_sandbox_file_t作为选项不存在),但是容器内的共享文件夹对用户jhipster不可用。我们首先,作为root,需要运行:

chown jhipster:jhipster /jhipster

然后已经:

su jhipster
cd /jhipster
yo jhipster
于 2014-08-22T14:43:10.723 回答