Не удается получить доступ к Centos sshd на Docker

Я прочитал статью, в которой служба SSH Daemon. Но я хочу работать на Centos6.4. Таким образом, я настроен с официального изображения centos с почти такой же конструкцией. Затем я подключаюсь к серверу centos sshd, но соединение немедленно закрывается. Вот сообщение.

ssh [email protected] -p 49164
The authenticity of host '[localhost]:49164 ([127.0.0.1]:49164)' can't be established.
RSA key fingerprint is 88:71:89:e5:30:91:78:5c:bf:cb:88:c2:5b:81:1a:b5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:49164' (RSA) to the list of known hosts.
[email protected] password: 
Connection to localhost closed.

Почему я не могу подключить сервер centos sshd?

Ответы

Ответ 1

Если у вас такая же проблема, отлично работает, если вы отключите PAM в конфигурации sshd.

Вот соответствующие строки из нашего Dockerfile

RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config

Ответ 2

У меня есть sshd, работающий с изображением "centos" из репозитория Docker:

  • Мне не нужно было изменять sshd_config, то есть установить UsePAM yes по умолчанию
  • Мне нужно было запустить /etc/init.d/sshd start в моем файле Docker, поскольку он генерирует ключи при первом запуске.
  • Мне нужно было установить разрешения на .ssh

Мой Dockerfile:

FROM centos:latest

RUN yum update -y
RUN yum install -y openssh-server sudo

RUN  /etc/init.d/sshd start

RUN useradd admin -G wheel
RUN echo 'admin:secret' | chpasswd
RUN echo '%wheel ALL=(ALL) ALL' >> /etc/sudoers

RUN mkdir -p /home/admin/.ssh
ADD authorized_keys /home/admin/.ssh/
RUN chown -R admin:admin /home/admin/.ssh; chmod 700 /home/admin/.ssh

EXPOSE 22
CMD    ["/usr/sbin/sshd", "-D"]

Ответ 3

Мне также пришлось сгенерировать серверные ключи, прежде чем "ssh -v" сразу же выйдет с помощью

...
debug1: SSH2_MSG_KEXINIT
Connection closed by ...

Здесь моя работа (Vagrant 1.3.5 и docker 0.7) Конфигурация Dockerfile для sshd:

# sshd
RUN echo 'root:secret' | chpasswd
RUN yum install -y openssh-server
RUN mkdir -p /var/run/sshd ; chmod -rx /var/run/sshd
# http://stackoverflow.com/questions/2419412/ssh-connection-stop-at-debug1-ssh2-msg-kexinit-sent
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# Bad security, add a user and sudo instead!
RUN sed -ri 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config
# http://stackoverflow.com/questions/18173889/cannot-access-centos-sshd-on-docker
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config

####################
ADD supervisord.conf /etc/supervisord.conf
EXPOSE 10389 22
CMD ["/usr/bin/supervisord"]

My supervisord.conf:

[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
autorestart=true

Ответ 4

На веб-сайте Docker пример Док-станция службы SSH Daemon показывает файл Docker, который решает эту проблему. Важной линией является команда sed после комментария SSH login fix:

# sshd
#
# VERSION               0.0.2

FROM ubuntu:14.04
MAINTAINER Sven Dowideit <[email protected]>

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

Он основан на изображении Ubuntu, но он также работает и для CentOS 6.