Не удается получить доступ к 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.