构建支持SSH服务的镜像

linux系统管理员通过SSH服务来管理操作系统,进入容器已经有exec命令可以用,但是远程主机如果访问容器没办法,我们仍然可以用ssh服务来维护,这就需要我们构建自定义镜像支持ssh连接。构建自定义镜像可以通过docker commit 命令基于已有的镜像构建,也可以通过Dockerfile构建,这里使用后者

1、前期准备

   如图,新建个独立文件夹,需要一下三个文件

   文件已上传github:https://github.com/1823667370/docker-ssh

     

 1)宿主主机公钥文件authorized_keys

    在宿主主机用ssh-keygen -t rsa命令生成公钥,并将公钥信息复制到authorized_keys

    如图生成公钥,路径是/root/.ssh/id_rsa.pub,然后再当前目录执行命令:

    cat /root/.ssh/id_rsa.pub >authorized-keys 此时已有authorized-keys文件了

     构建支持SSH服务的镜像_第1张图片

 2)Dockerfile文件  

     其中不理解的直接看注释句即可     

FROM selenium/hub
LABEL authors=songer

USER root

#安装ssh服务
RUN apt-get update&&apt-get install -y openssh-server
#要正常启动ssh服务,需要目录/var/run/ssd存在
RUN mkdir -p /var/run/sshd
#在root用户下创建.ssh目录,并复制需要登录的公钥信息(一般为本地主机用户目录下的.ssh/id_rsa.pub文件,
#可由ssh-keygen -t rsa命令生成,cat /root/.ssh/id_rsa.pub >authorized-keys)到authorized-keys文件中
RUN mkdir -p /root/.ssh

#取消pam登录限制
RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
#添加认证文件和启动脚本
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /root/run.sh
#RUN echo "#!/bin/bash" > /root/run.sh
#RUN echo "/usr/sbin/sshd -D" >> /root/run.sh
RUN chmod u+x /root/run.sh

#暴露端口
EXPOSE 22
#设置默认启动ssh的命令
#CMD ["/root/run.sh"]

 3)run.sh文件

#/bin/bash
/usr/sbin/sshd -D
2、构建ssh服务的镜像并运行

    docker build -t selenium/ssh /opt/songer/ssh_selenium/

    如图镜像已经构建好了

    

   运行镜像

   docker run -d -p 5022:22 selenium/ssh

     

3、测试ssh连接

     ssh 192.168.10.241 -p 5022,测试拒绝连接

    

    先排查容器端口22是不是处于监听状态,排除容器问题

    docker exec -it 128 /bin/bash 进入容器后输入netstat -tunlp查看处于监听的端口,发现只有selenium端口4444,定位是服务没起来

    构建支持SSH服务的镜像_第2张图片

    手动启动 /usr/sbin/sshd -D没反应,去掉-D启动成功

    构建支持SSH服务的镜像_第3张图片

   退出容器继续测试连接,连接成功,进入容器

    构建支持SSH服务的镜像_第4张图片

你可能感兴趣的:(docker)