在高山码头集装箱中运行OpenSSH [英] Running OpenSSH in an Alpine Docker Container

查看:190
本文介绍了在高山码头集装箱中运行OpenSSH的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已安装OpenSSH ,现在我想运行如文档中所述,运行 / etc / init .d / sshd开始。但是它不会开始:

I've installed OpenSSH and now I wish to run it as described in the documentation by running /etc/init.d/sshd start. However it does not start:

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

想法?

PS

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

/ etc / init的内容。 d / sshd:

Contents of /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 $?
    }


推荐答案

容器不全安装环境。
官方文件是在某些机器上安装的高山。
启动,启动服务等容器没有。

A container is not a full installed environment. The official document is for that installed alpine on some machine. With power on, boot up services, etc. that a container does not have.

所以,$ code> / etc / init .d / 不能直接用于引导服务使用的容器(如systemd或alpine的rc *)。这就是为什么你收到错误消息,因为 rc * 没有安装在容器中。

So, anything in /etc/init.d/ can not be used directly in a container which is used by boot up service (like systemd, or alpine's rc*). That's why you got error messages cause the rc* isn't installed in the container.

你需要什么做是开始sshd manuanlly。
你可以看下面的例子:

What you need to do is start sshd manuanlly. You can take look on below example:

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

这篇关于在高山码头集装箱中运行OpenSSH的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆