創建一個支持 sshd 服務的 docker 鏡像
阿新 • • 發佈:2018-02-02
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 鏡像