1. 程式人生 > >創建一個支持 sshd 服務的 docker 鏡像

創建一個支持 sshd 服務的 docker 鏡像

user 嘗試 rsa dont hotmail remove 創建 auth run

前言

當我們運行容器後,第一件會想到的事情,就是如何連接容器。一般來說,連接容器的方式大概有四種。分別是attach、exec、ssh 和 nsenter.

attach 和 exec 都是 docker 自帶的命令,不需要做任何配置。

這篇文章,主要嘗試配置一個實現 sshd 服務的鏡像。並用這個鏡像生成容器,然後驗證 ssh 登錄的功能。

操作過程

環境說明

宿主機 : ubunt:16.04

用 Dockerfile 文件建立一個鏡像

hell@hell:~/mysshd_ubuntu$ cat Dockerfile 
FROM ubuntu:16.04

MAINTAINER hellochenpro  [email protected]
ENV REFRESHED_AT 2018-02-02

RUN apt-get -qqy update &&          apt-get install -qqy openssh-server &&                  apt-get autoclean &&                  apt-get autoremove &&                  rm -rf /var/lib/apt/lists/*

RUN useradd -s  /bin/bash hell
RUN echo ‘hell:123456‘ | chpasswd

COPY  id_rsa.pub  /home/hell/.ssh/authorized_keys

RUN   chmod 700 /home/hell/.ssh/ &&            chmod 600 /home/hell/.ssh/authorized_keys &&                      chown  -R  hell:hell   /home/hell/.ssh

RUN mkdir -p /var/run/sshd

EXPOSE 22

CMD /usr/sbin/sshd -D

Dockerfile 說明:
用ubuntu:16.04 的原生系統創建,
先用 apt-get 更新源,並安裝了 openssh-server
然後,創建了一個用戶 hell
接著,將 Dockerfile 上下文環境的 id_rsa.pub 公鑰復制到 鏡像中,
並且將 /home/hell/.ssh 和 authorized_keys 目錄和文件的權限,所屬組、所屬主都進行修改,否則實現不了免密碼登錄
然後,將容器的22端口暴露;
最後,以後臺守護進程的方式運行 sshd 服務

創建容器

先準備秘鑰對
ssh-keygen   -t   rsa  -b  2048   # 一路回車確認,然後將公鑰 id_rsa.pub 放到 Dockerfile 目錄(上下文)環境
開始創建鏡像
 docker  build   --rm  -t   my_sshd    .
 # 創建成功 my_sshd 鏡像
啟動鏡像
docker  run  -d   -p   10035:22   --name container_sshd   my_sshd
# 啟動一個容器 container_sshd 
嘗試用 ssh 登錄容器
ssh   [email protected]   -p   10035  -f   id_rsa   # 在宿主機通過端口10035 登錄容器,使用 id_rsa 密鑰文件

成功!

總結

其實,一般不推薦使用 ssh 的方式登錄容器,因為這樣和一個容器只運行一個進程的原則相違背。詳細的討論請移步這篇文章《為什麽不需要在 Docker 容器中運行 sshd》。

創建一個支持 sshd 服務的 docker 鏡像