通过ssh连接到CentOS 7上的jhipster docker容器

时间:2014-08-21 14:14:55

标签: ubuntu ssh centos docker jhipster

我安装了docker(version 0.11.1-dev, build 02d20af/0.11.1);对于CentOS 7来说似乎是最新的(yum update docker表示没有更新)。

根据installation instructions on jhipster site我已拉出当前图片并运行:

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:4022 ip-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]

1 个答案:

答案 0 :(得分:1)

1) ssh 访问

CentOS 7 看来问题是 CentOS 7 存储库只有一个旧的Docker版本; CentOS 6 Ubuntu 都使用版本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 连接得到了进一步,因此我假设错误on CentOS 7 是由 Docker 版本引起的,但是 ssh 在客户端 pam会话连接错误时立即断开连接未打开并在容器端 PAM:pam_open_session():无法创建/删除指定会话的条目

此处看起来与 [FIXED] ubuntu 14.04 container with ssh login issues #5663 有关。即使它被标记为"固定"。在任何情况下,我尝试的线程中提到的解决方案之一足以修复我的 ssh 连接问题:

  

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

看来,运行也足够了:

  

sed' s / UsePAM yes / UsePAM no /' -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 ?#34;?一旦我们到达命令行,我们需要做的就是:

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