Docker爲鏡像添加SSH服務

很多時候用戶希望通過遠程登錄服務器來進行管理,但是Docker的很多鏡像都不支持SSH服務,接下來將會介紹爲Docker鏡像添加SSH服務的兩種方法:

1. 基於Commit命令的創建
通過對容器進行ssh的配置,生成一個新的鏡像。
首先獲取ubuntu:18.04的鏡像,之後創建一個名叫ssh的容器
docker pull Ubuntu:18.04
docker run -it --name ssh ubuntu:18.04 bash
可能會出現如下的錯誤

Error:WARNING: IPv4 forwarding is disabled. Networking will not work.
解決方法: vim /usr/lib/sysctl.d/00* 添加(本地文件)
net.ipv4.ip_forward=1,刪除容器,重啓網絡(systemctl restart network),
重新創建容器

使用apt-get update更新軟件源。

如果覺得官方的軟件源下載速度慢的話,可以更換軟件源。 vi
/etc/apt/sources.list.d/name,name可以更具軟件源的名字命名,我用的163的

deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse

之後選擇主流的openssh-server作爲服務端。
apt-get install opessh-server
如果需要正常啓動ssh,則容器內必須要有/var/run/sshd的目錄
mkdir -p /var/run/sshd
/usr/sbin/sshd -D & (啓動ssh服務)
ssh默認監聽的端口爲22,此時使用以下命令查看端口狀態
natstat -tunlp
在這裏插入圖片描述
修改ssh服務的安全登錄配置,取消pam

sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd

在root用戶下創建.ssh目錄 。在其中創建authorized_keys文件

mkdir -p root/.ssh
vi /root/.ssh/authorized_keys

該文件內容一般爲本地主機用戶文件夾下的~/.ssh/id_rsa.pub的內容,如果主機中沒有這個文件夾,得root命令來生成祕鑰,並放至該文件中。在這裏插入圖片描述
此時配置ssh基本完成,此時需要創建自動啓動ssh的文件run.sh,並添加可執行權限
vi /run.sh
chmod +x run.sh
文件內容如下:
#!/bin/bash
/usr/sbin/sshd -D
之後退出容器,提交該容器爲鏡像即可
docker commit

2.基於Docker命令的創建
首先創建一個工作目錄 mkdir sshd_ubuntu
之後在該目錄中創建run.sh(與上面run.sh內容一致) , Dockerfile。
ssh-keygen -t rsa生成祕鑰,一般生成文件在~/.ssh文件下,
cat ~/.ssh/id_rsa.pub >authorized_keys生成一個authorized_keys文件

Dockerfile:

#繼承鏡像
FROM ubuntu:18.04


#提供作者信息
MAINTAINER docker_user  ([email protected])
#更新軟件源
RUN apt-get update

#安裝ssh
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
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

#複製  ~/.ssh/authorized_keys,並賦予執行權限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 755 /run.sh

#打開ssh端口
EXPOSE 22

#設置自啓命令
CMD ["/run.sh"]

最後,使用docker build 命令創建即可。

3.使用鏡像
前面教會了你怎樣去爲鏡像配置ssh服務,接下來的內容將會帶你去使用帶有ssh服務的鏡像。
首先使用之前commit的鏡像創建一個容器:

 docker run -p 10022:22 -d --name ssh1 /run.sh

-d: 讓容器在後臺運行
-p:主機與容器端口的映射,ssh的默認端口爲22

之後就可以使用在宿主主機訪問10022端口來登錄該容器,
$ ssh ip -p 10022
在這裏插入圖片描述

寫作不易,關注一下唄xiaolian☺

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章