Docker SSH 镜像创建

为什么要用 SSH 镜像?明明已经有 exec 可以进入容器了。我想每个看到这篇文章的人都有自己不得已的理由,而我的路由就是我们的开发在执行一后台任务时候,是利用 ssh 的方式连接到另外一台服务器才进行许多操作的,比如上传文件、查看日志、启动服务等等。

制作 SSH 引擎主要有一下几个问题:

  1. 在基础镜像包中安装 ssh 服务
  2. 让 ssh 服务在前台运行
  3. 可以自主定义 ssh 镜像的 root 用户名密码

因为涉及到要使用 ssh 镜像的场景,一般都涉及到较为复杂的老旧程序的容器化改造,所以这里选用的基础镜像是 centos7

下载 ssh 服务所需要的 RPM 包

docker run -it --rm -v /tmp:/tmp  centos:7
yum install openssh-server  passwd --downloadonly --downloaddir=/tmp

将下载好的 rpm 包复制到 dockerfile 的目录下面,这里是文件夹 sshd

Dockerfile

FROM centos:7
COPY sshd /yums/
ADD run.sh /app/
RUN  yum install /yums/*.rpm -y 
RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''&& \
    ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' && \
    ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key  -N '' &&\
    sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config && \
    sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config &&\
    chmod +x /app/run.sh &&\
    echo '123456' | passwd root --stdin
# Set timezone
ENV TZ Asia/Shangha
WORKDIR /app
ENTRYPOINT [ "/app/run.sh" ]

启动脚本

#!/bin/bash
if [[ $ROOTPASSWORD ]]; then
    echo $ROOTPASSWORD | passwd root --stdin
fi
/sbin/sshd -D

在K8S 内如果需要修改 root 密码,可以使用环境变来操作。

          env:
            - name: ROOTPASSWORD
              value: "123456"

你可能感兴趣的:(Docker SSH 镜像创建)