• 为Docker镜像添加SSH服务


    一、基于commit命令创建

      1、 首先下载镜像

    $ docker run -it ubuntu:16.04 /bin/bash
    

      2、 安装SSH服务

    #更新apt缓存
    root@5ef1d3163265:/# apt-get update
    
    root@5ef1d3163265:/# apt-get install openssh-server -y
    

      3、 配置SSH服务:如果需要正常启动SSH服务,则需手动创建/var/run/sshd目录,并启动ssh服务。

        1) 创建目录

    root@5ef1d3163265:/# mkdir -p /var/run/sshd
    

        

        2) 启动ssh服务

    root@5ef1d3163265:/# /usr/sbin/sshd -D &
    

        3) 修改SSH服务的安全登录设置,取消pam登录限制

    root@5ef1d3163265:/# sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
    

        4) 在/root下创建.ssh目录

    root@5ef1d3163265:/# mkdir /root/.ssh
    

        5) 创建文件/root/.ssh/authorized

    root@5ef1d3163265:/# vim /root/.ssh/authorized
    

        6) 将宿主机的.ssh目录下的id_rsa.pub内容全部copy到authorizedj里

      

      4、 在docker镜像里添加运行脚本run.sh

    root@5ef1d3163265:/# vim run.sh
    
    【/run.sh】
    
    #!/bin/bash
    /usr/sbin/sshd -D &
    
    # 退出镜像
    root@5ef1d3163265:/# exit
    

      5、 用docker commit命令保存镜像

    # 查看刚刚运行的镜像的CONTAINER ID,复制一会有用
    $ docker ps -a
    
    # 5ef1d3163265为刚刚运行的ubuntu的CONTAINER ID
    $ docker commit 5ef1d3163265  sshd:ubuntu
    
    # 查看镜像
    $ docker images
    

      6、 使用刚刚创建的镜像sshd:ubuntu

    # 启动容器,并添加端口映射,6666是宿主机的端口,22是窗口的端口
    $ docker run -p 6666:22 -d sshd:ubuntu /run.sh
    
    # 查看容器运行情况
    $ docker ps
    

      7、 宿主机连接容器

    #采用以下两个方法都可以连接
    $ ssh root@localhost -p 6666   
    $ ssh 172.17.0.2 -p 6666         //此处的IP为容器IP,查看方法: docker inspect + 容器ID | grep IP 
    

    二、 使用Dockerfile创建基于带有ssh的镜像

      1、 创建Dockerfile根目录

    $ mkdir sshd_ubuntu
    $ cd sshd_ubuntu
    

      2、 编写run.sh脚本

    $ vim run.sh
    
    【run.sh】
    
    #!.bin/bash
    /usr/sbin/sshd -D
    

      3、 创建authorized_keys文件

    $ ssh-keygen
    $ cat ~/.ssh/id_rsa.pub >authorized_keys
    

      4、 复制/var/pam.d/sshd到Dockerfile目录下

    $ sudo cp /var/pam.d/sshd  ./
    $ sudo vim sshd
    
    # 注释以下一行
    # session        required        pam_loginuid.so
    

     

      5、 编写Dockerfile

    #设置继承镜像
    FROM ubuntu:latest
    
    #作者信息
    MAINTERNET Foo Bar foo@bar.com
    
    #安装apt-utils和ssh
    RUN apt-get update
    RUN apt-get install -y apt-utils
    RUN apt-get update
    RUN apt-get install -y openssh-server
    RUN mkdir -p /var/run/sshd              //容器中需有此目录后SSH服务方能运行
    RUN mkdir /run/.ssh
    
    #复制文件到相应的目录
    ADD sshd /var/pam.d/sshd
    ADD authorized_keys /root/.ssh
    RUN chmod 755 /run.sh
    
    # 开放端口
    EXPOSE 22
    
    #设置自启动命令
    CMD 【“/run.sh”】
    

     

      6、 创建镜像

    jeff@node1:~/$ cd sshd_ubuntu
    jeff@node1:~/sshd_ubuntu$ docker build -t sshd:dockerfile .
    

      7、 查看镜像

    $ docker images
    

      8、 测试镜像,运行容器

    #启动镜像,并映射窗口的22端口到本地的6666端口
    $ docker run -d -p 6666:22
    
    #查看镜像
    $ docker images
    

      9、 在宿主机连接到新建的容器

    $ ssh root@localhost -p 6666 
    

     

              

  • 相关阅读:
    如何查看MySQL的当前存储引擎?
    避免生产环境执行更新删除语句忘记加where条件的解决方案
    物联网发展的现状
    目前行业内比较流行的开源时序数据库产品
    如何查看端口(3306)被那个程序占用
    MySQL数据库开发的36条军规
    介绍 MySQL 8 中值得关注的新特性和改进。
    IE浏览器 兼容性(IE9-11 差异说明)
    python3:(unicode error) 'utf-8' codec can't decode
    静态代码块
  • 原文地址:https://www.cnblogs.com/jefflee168/p/7400346.html
Copyright © 2020-2023  润新知