我安装了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]
答案 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