подключиться через ssh к док-контейнеру jhipster на CentOS 7

Я установил докер (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:4022, ip-of-container:22; с локальных или удаленных хостов с теми же результатами.

Таким образом, проблемы, похоже, связаны с контейнером или докером (или, в конечном итоге, с настройками Ubuntu в докере). Однако docker top jhipster показывает мне, что sshd работает, и - да, трассировка явно показывает, что я достиг сервера ssh.

Любые идеи?

Отредактировано Я запустил образ докера, чтобы он вошел в командную строку, а затем запустил 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]


person Normunds Kalnberzins    schedule 21.08.2014    source источник


Ответы (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 При тестировании в CentOS 6 с использованием Docker 1.1.2 у меня не было такой проблемы (ssh соединение продвинулось дальше, поэтому я предполагаю, что ошибка в CentOS 7 была вызвана версией Docker), однако ssh отключился, как только подключился к ошибка на стороне клиента сессия pam не открыта и на стороне контейнера PAM: pam_open_session(): невозможно создать/удалить запись для указанной сессии.

Здесь похоже, что это связано с [ИСПРАВЛЕНО] Контейнер ubuntu 14.04 с проблемами входа по ssh #5663 . Даже если он помечен как «фиксированный». В любом случае одного из решений, упомянутых в ветке, которую я пробовал, было достаточно, чтобы исправить мою проблему с подключением ssh:

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

Кажется, достаточно было бы также запустить:

sed 's/UsePAM да/UsePAM нет/' -i /etc/ssh/sshd_config

вместо этого, но я не пробовал этот вариант.

Вывод: подключение ssh в CentOS можно исправить, запустив образ с помощью командной строки.

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.

В CentOS 7, использующей старую версию Docker, нам нужно изменить контекст selinux каталога хоста (в нашем случае ~/jhipster):

chcon -Rt svirt_sandbox_file_t ~/jhipster

В CentOS 6 в этом нет необходимости (и svirt_sandbox_file_t не существует в качестве опции), однако общая папка внутри контейнера недоступна для пользователя jhipster. Сначала нам, как root, нужно запустить:

чоун jhipster: jhipster / jhipster

И тут уже:

su jhipster
cd /jhipster
yo jhipster
person Normunds Kalnberzins    schedule 22.08.2014
comment
Что вы подразумеваете под старой версией Docker? - person MariuszS; 15.02.2015
comment
на тот момент репозитории Centos 7 содержали только относительно старую версию. Сегодня он кажется довольно современным. - person Normunds Kalnberzins; 15.02.2015
comment
Хорошо, спасибо, но все равно нужен svirt_sandbox_file_t, это связано не со старой версией докера, а с усиленной безопасностью в Centos7. - person MariuszS; 15.02.2015