V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuliliuli2017
V2EX  ›  SSH

Docker 构建 SSH Server

  •  
  •   liuliliuli2017 · 2017-03-14 23:18:44 +08:00 · 3124 次点击
    这是一个创建于 2815 天前的主题,其中的信息可能已经有所发展或是发生改变。

    收录待用,修改转载已取得腾讯云授权

    Docker 官方网站上给出的示例里面有个 用 Dockerfile 构建 SSH Server 的例子, 我在腾讯云的主机上实验了一下, 中间添加了一些优化, 把实验过程记录如下, 希望对大家有帮助.

    一. 相关的文件

    1. 新建一个目录和一个 Dockerfile

    mkdir y109-sshd
    vim Dockerfile
    
    

    2. Dockerfile 的内容如下

    # docker sshd
    FROM ubuntu:14.04
    MAINTAINER y109<[email protected]>
    
    # 使用 163.com 的源
    COPY sources.list.163.txt /etc/apt/sources.list
    RUN apt-get -y update
    
    # 设置 root 密码
    RUN echo 'root:bMg5kesfdsfesx9gD' | chpasswd
    
    # 安装 openssh-server
    RUN apt-get -y install openssh-server
    RUN mkdir /var/run/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
    #
    # ENV NOTVISIBLE "in users profile"
    RUN echo "export VISIBLE=now" >> /etc/profile
    
    # 添加公钥(如果没有公钥可以省略)
    RUN mkdir /root/.ssh
    RUN echo 'ssh-rsa YOU_PUB_KEY' > /root/authorized_keys
    
    # 容器启动后运行的程序
    CMD ["/usr/sbin/sshd", "-D"]
    
    # 打开 22 端口
    EXPOSE 22
    
    

    sources.list.163.txt 的内容如下

    deb http://mirrors.163.com/ubuntu/ precise main restricted
    deb-src http://mirrors.163.com/ubuntu/ precise main restricted
    
    deb http://mirrors.163.com/ubuntu/ precise-updates main restricted
    deb-src http://mirrors.163.com/ubuntu/ precise-updates main restricted
    
    deb http://mirrors.163.com/ubuntu/ precise universe
    deb-src http://mirrors.163.com/ubuntu/ precise universe
    deb http://mirrors.163.com/ubuntu/ precise-updates universe
    deb-src http://mirrors.163.com/ubuntu/ precise-updates universe
    
    deb http://mirrors.163.com/ubuntu/ precise-security main restricted
    deb-src http://mirrors.163.com/ubuntu/ precise-security main restricted
    deb http://mirrors.163.com/ubuntu/ precise-security universe
    deb-src http://mirrors.163.com/ubuntu/ precise-security universe
    
    

    二.构建 Image

    使用 docker build 来生成镜像 -t 参数是给这个镜像的 TAG

    sudo docker build -t 'y109/sshd' ./
    Sending build context to Docker daemon 4.608 kB
    Sending build context to Docker daemon
    Step 0 : FROM ubuntu:14.04
     ---> 9cbaf023786c
    Step 1 : MAINTAINER y109<[email protected]>
     ---> Using cache
     ---> 2256ab1cc931
    Step 2 : COPY sources.list.163.txt /etc/apt/sources.list
     ---> Using cache
     ---> 65536ca26964
    Step 3 : RUN apt-get -y update
     ---> Using cache
     ---> 60639e42f098
    Step 4 : RUN echo 'root:pass123456' | chpasswd
     ---> Using cache
     ---> 8644dd20854f
    Step 5 : RUN apt-get -y install openssh-server
     ---> Using cache
     ---> 98039327bca7
    Step 6 : RUN mkdir /var/run/sshd
     ---> Using cache
     ---> 9bd3b3fc7828
    Step 7 : RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
     ---> Using cache
     ---> d748cb9428a0
    Step 8 : RUN echo "export VISIBLE=now" >> /etc/profile
     ---> Using cache
     ---> e975cd819243
    Step 9 : RUN mkdir /root/.ssh
     ---> Using cache
     ---> e561acc07675
    Step 10 : RUN echo 'ssh-rsa YOU_PUBLIC_KEY'
     ---> Using cache
     ---> 8f6882a72037
    Step 11 : CMD ["/usr/sbin/sshd", "-D"]
     ---> Using cache
     ---> 48cbd2c4aa70
    Step 12 : EXPOSE 22
     ---> Using cache
     ---> 3101a36f0084
    Successfully built 3101a36f0084
    
    

    使用 docker images 命令查看镜像, 确认镜像构建成功了

    sudo docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    y109/sshd           latest              3101a36f0084        22 minutes ago      226.1 MB
    <none>              <none>              23f604e547b8        28 minutes ago      226.1 MB
    <none>              <none>              50647a1fb746        36 minutes ago      226.1 MB
    y
    ...
    
    

    y109/sshd就是我们刚才构建的镜像

    三.创建 Container

    使用 docker run 来用镜像创建一个 Container

    -d : Detached mode, 使 Container 在 background 模式运行
    -p : 把 22 端口映射到主机的网卡上, 格式: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
    – name : 给 Container 指定一个名字, 一旦指定了名称这个名称就和这个 Container 绑定了, 可以用 docker ps -a 列出来
    
    

    sudo docker run -d -p 10922:22 --name y109-sshd y109/sshd 我用的外网端口是 10922, 可以根据需要修改, 下一步需要确认 Container 是否正常执行了

    sudo docker ps
    CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                   NAMES
    fc37b83d343e        y109/sshd:latest    "/usr/sbin/sshd -D"   9 seconds ago       Up 9 seconds        0.0.0.0:10922->22/tcp   y109-sshd
    
    

    看来执行成功了, 连接试试看看

    ssh root@localhost -p10922
    The authenticity of host '[localhost]:10922 ([127.0.0.1]:10922)' can't be established.
    ECDSA key fingerprint is 4d:48:5c:61:54:d6:8f:62:70:a2:0e:ab:b7:1a:cb:f7.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[localhost]:10922' (ECDSA) to the list of known hosts.
    
    The programs included with the Ubuntu system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.
    
    Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
    applicable law.
    
    root@80f07ad418fe:~#
    
    

    已经成功连接进入 Container 了

    四.关闭 Container

    sudo docker stop fc3 fc3 是 Container Id fc37b83d343e 的缩写, 只要能够唯一标识这个 Container 就可以了。或者sudo docker stop y109-sshd

    五.运行 Container

    sudo docker start y109-sshd

    原文来自: https://www.qcloud.com/community/user/16481600148101181

    9 条回复    2017-03-16 21:26:25 +08:00
    LuckSouth
        1
    LuckSouth  
       2017-03-14 23:24:20 +08:00
    赞一个~
    aec4d
        2
    aec4d  
       2017-03-14 23:41:05 +08:00 via iPhone
    刚学会用 docker 的心情能理解,不过说负优化不为过,就不能用 alpine 做基础镜像吗,一定要把 RUN 写那么多行吗,不考虑下写的顺序,一定要把没用的输出都写上凑够字数吗…………
    est
        3
    est  
       2017-03-15 00:07:03 +08:00
    yxwzaxns
        4
    yxwzaxns  
       2017-03-15 08:11:17 +08:00 via iPhone
    讲道理,这个没什么意义
    liuliliuli2017
        5
    liuliliuli2017  
    OP
       2017-03-15 12:50:48 +08:00
    @est 感谢
    liuliliuli2017
        6
    liuliliuli2017  
    OP
       2017-03-15 12:51:59 +08:00
    @yxwzaxns 啊...我那我还是按照楼上推荐的吧,这个收录就闲置下来先
    liuliliuli2017
        7
    liuliliuli2017  
    OP
       2017-03-15 12:53:15 +08:00
    @aec4d 还没有按照教程做过,感谢指引
    liuliliuli2017
        8
    liuliliuli2017  
    OP
       2017-03-15 12:53:25 +08:00
    @LuckSouth 嘻嘻
    julyclyde
        9
    julyclyde  
       2017-03-16 21:26:25 +08:00
    问题是你构建出这么个东西来做什么用
    真是拿着锤子看啥都像钉子啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3281 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:41 · PVG 20:41 · LAX 04:41 · JFK 07:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.