使用docker容器自动启动sshd

Dmi*_*hin 20 sshd docker

鉴于:

  • 基于ubuntu的容器:13.10
  • 安装ssh(通过apt-get install ssh)

问题:每次启动容器时我都必须手动运行sshd service ssh start

试过:update-rc.d ssh defaults但它没有帮助.

问题:如何设置容器以在容器启动期间自动启动sshd服务?

Jia*_*Jia 16

试一试:

ENTRYPOINT service ssh restart && bash
Run Code Online (Sandbox Code Playgroud)

在您的dockerfile中,它对我来说很有趣!

更多详细信息:如何在运行docker容器时自动启动服务?


Pix*_*xel 13

我认为正确的方法是按照 docker 的说明来 dockerizing ssh 服务。

与具体问题相关,在 dockerfile 末尾添加的以下几行将实现您所寻找的内容:

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
Run Code Online (Sandbox Code Playgroud)

Docker 化 SSHD 服务


ken*_*orb 9

这是一个Dockerfile安装 ssh 服务器并运行它的程序:

# Build Ubuntu image with base functionality.
FROM ubuntu:focal AS ubuntu-base
ENV DEBIAN_FRONTEND noninteractive
SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# Setup the default user.
RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo ubuntu
RUN echo 'ubuntu:ubuntu' | chpasswd
USER ubuntu
WORKDIR /home/ubuntu

# Build image with Python and SSHD.
FROM ubuntu-base AS ubuntu-with-sshd
USER root

# Install required tools.
RUN apt-get -qq update \
    && apt-get -qq --no-install-recommends install vim-tiny=2:8.1.* \
    && apt-get -qq --no-install-recommends install sudo=1.8.* \
    && apt-get -qq --no-install-recommends install python3-pip=20.0.* \
    && apt-get -qq --no-install-recommends install openssh-server=1:8.* \
    && apt-get -qq clean    \
    && rm -rf /var/lib/apt/lists/*

# Configure SSHD.
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
RUN mkdir /var/run/sshd
RUN bash -c 'install -m755 <(printf "#!/bin/sh\nexit 0") /usr/sbin/policy-rc.d'
RUN ex +'%s/^#\zeListenAddress/\1/g' -scwq /etc/ssh/sshd_config
RUN ex +'%s/^#\zeHostKey .*ssh_host_.*_key/\1/g' -scwq /etc/ssh/sshd_config
RUN RUNLEVEL=1 dpkg-reconfigure openssh-server
RUN ssh-keygen -A -v
RUN update-rc.d ssh defaults

# Configure sudo.
RUN ex +"%s/^%sudo.*$/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/g" -scwq! /etc/sudoers

# Generate and configure user keys.
USER ubuntu
RUN ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
#COPY --chown=ubuntu:root "./files/authorized_keys" /home/ubuntu/.ssh/authorized_keys

# Setup default command and/or parameters.
EXPOSE 22
CMD ["/usr/bin/sudo", "/usr/sbin/sshd", "-D", "-o", "ListenAddress=0.0.0.0"]
Run Code Online (Sandbox Code Playgroud)

使用以下命令构建:

docker build --target ubuntu-with-sshd -t ubuntu-with-sshd .
Run Code Online (Sandbox Code Playgroud)

然后运行:

docker run -p 2222:22 ubuntu-with-sshd
Run Code Online (Sandbox Code Playgroud)

要通过本地端口连接到容器,运行:ssh -v localhost -p 2222

要检查容器 IP 地址,请使用docker psdocker inspect


以下是docker-compose.yml文件示例:

---
version: '3.4'
services:
  ubuntu-with-sshd:
    image: "ubuntu-with-sshd:latest"
    build:
      context: "."
      target: "ubuntu-with-sshd"
    networks:
      mynet:
        ipv4_address: 172.16.128.2
    ports:
      - "2222:22"
    privileged: true # Required for /usr/sbin/init
networks:
  mynet:
    ipam:
      config:
        - subnet: 172.16.128.0/24
Run Code Online (Sandbox Code Playgroud)

要运行,请键入:

docker-compose up --build
Run Code Online (Sandbox Code Playgroud)


404*_*pio 5

我创建了 dockerfiler 来在里面运行 ssh。我认为它不安全,但对于 DMZ 中的测试/开发来说可能没问题

FROM ubuntu:20.04

USER root

# change root password to `ubuntu`
RUN echo 'root:ubuntu' | chpasswd

ENV DEBIAN_FRONTEND noninteractive

# install ssh server
RUN apt-get update && apt-get install -y \
  openssh-server sudo \
  && rm -rf /var/lib/apt/lists/*

# workdir for ssh
RUN mkdir -p /run/sshd

# generate server keys
RUN ssh-keygen -A

# allow root to login
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config

EXPOSE 22

# run ssh server
CMD ["/usr/sbin/sshd", "-D", "-o", "ListenAddress=0.0.0.0"]

Run Code Online (Sandbox Code Playgroud)


Mag*_*res -18

您可以尝试使用 phusion/baseimage-docker 更优雅的方式来做到这一点

https://github.com/phusion/baseimage-docker#readme

  • 这确实没有回答所提出的问题。这是获取运行 sshd 的 Docker 容器的旁路,而不是在 Docker 容器中自动启动 sshd 的方法。对于那些无法改变他们所继承的形象的人来说毫无用处。 (15认同)