2016-02-29 4 views
1

J'ai installed OpenSSH et maintenant je souhaite l'exécuter comme décrit dans le documentation en exécutant /etc/init.d/sshd start. Cependant, il ne démarre pas:Exécution OpenSSH dans un conteneur Alpine Docker

/# /etc/init.d/sshd start 
/bin/ash: /etc/init.d/sshd: not found 

Réflexions?

P.S.

/ # ls -la /etc/init.d/sshd 
-rwxr-xr-x 1 root  root   2622 Jan 14 20:48 /etc/init.d/sshd 

Contenu de /etc/init.d/sshd:

#!/sbin/openrc-run 
    # Copyright 1999-2015 Gentoo Foundation 
    # Distributed under the terms of the GNU General Public License v2 
    # $Header: /var/cvsroot/gentoo-x86/net-misc/openssh/files/sshd.rc6.4,v 1.5 2015/05/04 02:56:25 vapier Exp $ 

    description="OpenBSD Secure Shell server" 
    description_checkconfig="Verify configuration file" 
    description_reload="Reload configuration" 

    extra_commands="checkconfig" 
    extra_started_commands="reload" 

    : ${SSHD_CONFDIR:=/etc/ssh} 
    : ${SSHD_CONFIG:=${SSHD_CONFDIR}/sshd_config} 
    : ${SSHD_PIDFILE:=/var/run/${SVCNAME}.pid} 
    : ${SSHD_BINARY:=/usr/sbin/sshd} 

    depend() { 
     use logger dns 
     if [ "${rc_need+set}" = "set" ] ; then 
      : # Do nothing, the user has explicitly set rc_need 
     else 
      local x warn_addr 
      for x in $(awk '/^ListenAddress/{ print $2 }' "$SSHD_CONFIG" 2>/dev/null) ; do 
       case "${x}" in 
        0.0.0.0|0.0.0.0:*) ;; 
        ::|\[::\]*) ;; 
        *) warn_addr="${warn_addr} ${x}" ;; 
       esac 
      done 
      if [ -n "${warn_addr}" ] ; then 
       need net 
       ewarn "You are binding an interface in ListenAddress statement in your sshd_config!" 
       ewarn "You must add rc_need=\"net.FOO\" to your /etc/conf.d/sshd" 
       ewarn "where FOO is the interface(s) providing the following address(es):" 
       ewarn "${warn_addr}" 
      fi 
     fi 
    } 

    checkconfig() { 
     if [ ! -d /var/empty ] ; then 
      mkdir -p /var/empty || return 1 
     fi 

     if [ ! -e "${SSHD_CONFIG}" ] ; then 
      eerror "You need an ${SSHD_CONFIG} file to run sshd" 
      eerror "There is a sample file in /usr/share/doc/openssh" 
      return 1 
     fi 

     if ! yesno "${SSHD_DISABLE_KEYGEN}"; then 
      ssh-keygen -A || return 1 
     fi 

     [ "${SSHD_PIDFILE}" != "/var/run/sshd.pid" ] \ 
      && SSHD_OPTS="${SSHD_OPTS} -o PidFile=${SSHD_PIDFILE}" 
     [ "${SSHD_CONFIG}" != "/etc/ssh/sshd_config" ] \ 
      && SSHD_OPTS="${SSHD_OPTS} -f ${SSHD_CONFIG}" 

     "${SSHD_BINARY}" -t ${SSHD_OPTS} || return 1 
    } 

    start() { 
     checkconfig || return 1 

     ebegin "Starting ${SVCNAME}" 
     start-stop-daemon --start --exec "${SSHD_BINARY}" \ 
      --pidfile "${SSHD_PIDFILE}" \ 
      -- ${SSHD_OPTS} 
     eend $? 
    } 

    stop() { 
     if [ "${RC_CMD}" = "restart" ] ; then 
      checkconfig || return 1 
     fi 

     ebegin "Stopping ${SVCNAME}" 
     start-stop-daemon --stop --exec "${SSHD_BINARY}" \ 
      --pidfile "${SSHD_PIDFILE}" --quiet 
     eend $? 

     if [ "$RC_RUNLEVEL" = "shutdown" ]; then 
      _sshd_pids=$(pgrep "${SSHD_BINARY##*/}") 
      if [ -n "$_sshd_pids" ]; then 
       ebegin "Shutting down ssh connections" 
       kill -TERM $_sshd_pids >/dev/null 2>&1 
       eend 0 
      fi 
     fi 
    } 

    reload() { 
     checkconfig || return 1 
     ebegin "Reloading ${SVCNAME}" 
     start-stop-daemon --signal HUP \ 
      --exec "${SSHD_BINARY}" --pidfile "${SSHD_PIDFILE}" 
     eend $? 
    } 
+0

-vous s'il vous plaît essayer d'installer 'OpenSSH-server' par' sudo apt-get install openssh-server'? –

+0

Il s'agit d'un conteneur Linux Alpine et il utilise le gestionnaire de paquets apk. S'il vous plaît voir le lien de la documentation pour plus d'informations. – Ole

+0

Puis 'apk ajoute openssh-server'. L'ajout de 'openssh-server' fonctionne dans les systèmes Debian. Alors juste une pensée. –

Répondre

3

Un conteneur est pas un environnement installé plein. Le document officiel est pour alpin installé sur une machine. Avec la mise sous tension, les services de démarrage, etc. qu'un conteneur n'a pas. Par conséquent, tout élément de /etc/init.d/ ne peut pas être utilisé directement dans un conteneur utilisé par le service de démarrage (comme systemd ou rc * de Alpine). C'est pourquoi vous avez des messages d'erreur, car le rc* n'est pas installé dans le conteneur.

Ce que vous devez faire est de démarrer sshd manuanlly. Vous pouvez prendre l'air sur exemple ci-dessous:

https://hub.docker.com/r/danielguerra/alpine-sshd/~/dockerfile/

+0

Bonne explication - merci! – Ole

+1

Je crois comprendre que l'exemple de script peut exécuter sshd, et pas n'importe quelle autre commande. Comment feriez-vous tourner sshd + une autre application, quelle que soit la commande que vous spécifiez? –

0

Vérifiez d'abord est sshd n'est pas présent dans /usr/bin ou /usr/sbin.

Ensuite, init.d devrait avoir sshd que si vous le réglez à démarrer automatiquement wiht:

rc-update add sshd 
rc-status 
+0

Il est présent est 'usr/sbin'. Exécuter également 'rc-update' aboutit à/bin/ash: rc-update: non trouvé ' – Ole

+0

@Ole un '/ usr/bin/sshd start' fonctionnerait-il au moins? – VonC

+0

lors de l'exécution que j'obtiens le même résultat >>>/#/usr/bin/sshd démarrer /bin/ash:/usr/bin/sshd: non trouvé – Ole