2013-08-11 6 views
14

Ich habe einen Artikel gelesen, dass SSH Daemon Service. Aber ich möchte auf Centos6.4 laufen. Also habe ich aus dem offiziellen centos-Image mit fast der gleichen Struktur aufgebaut. Dann verbinde ich mich mit dem Centos sshd Server, aber die Verbindung wird sofort geschlossen. Hier ist die Nachricht.Zugriff auf Centos sshd auf Docker

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]'s password: 
Connection to localhost closed. 

Warum kann ich keinen centos sshd server anschließen?

Antwort

19

Hatte das gleiche Problem hier, funktioniert gut, wenn Sie PAM in der sshd-Konfiguration ausschalten.

Hier sind die entsprechenden Zeilen aus unserem 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 
+1

Arbeit für mich! Vielen Dank! – holys

+0

Ist es wirklich so eine gute Idee, PAM einfach auszuschalten? Ich bin mit ssh nicht sehr vertraut, aber PAM steht für "Pluggable Authentication Module", was irgendwie nützlich klingt. –

+1

Ich hatte ein ähnliches Problem mit PAM und es stellte sich heraus, dass dies zu sein http://gaijin-nippon.blogspot.se/2013/07/audit-on-lxc-host.html 'pam_loginuid.so' scheint für gebrochen zu sein Container irgendwie. –

2

ich vor auch Serverschlüssel erzeugen musste, dass „ssh -v“ würde nur sofort Ausfahrt mit

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

meine Arbeits hier (Vagrant 1.3.5 und Docker 0.7) Dockerfile Konfiguration für 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"] 

Mein 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 
+0

Wie lautet das root-Passwort für die Anmeldung? – uvgroovy

+0

Entschuldigung, ich hatte den chpasswd-Schritt weggelassen, um das Passwort des root-Benutzers festzulegen. – jamshid

4

Ich habe sshd mit dem "centos" Bild von Docker Repo arbeiten:

  • ich nicht Notwendigkeit tat UsePAM yes der Standard zu modifizieren sshd_config dh
  • Ich braucht gesetzt um /etc/init.d/sshd start in meiner Dockerfile zu laufen, da dies Schlüssel beim ersten Lauf erzeugt.
  • ich auf Berechtigungen zu beheben brauchte .ssh

Mein Dockerfile ist:

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"] 
+1

Was ist authorized_keys? – jophde

2

Von der Docker Website, das Beispiel Dockerizing an SSH Daemon Service zeigt eine Dockerfile, die dieses Problem behebt. Die wichtige Zeile ist der sed-Befehl nach dem Kommentar 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"] 

Es auf einem Ubuntu Bild basiert, aber es funktioniert für CentOS 6 als auch.

+1

Ihr Link ist kaputt. Die neue URL lautet https://docs.docker.com/engine/examples/running_ssh_service/ – Soli