docker容器CentOS+ssh


參考:【創建支持SSH服務的CentOS鏡像】【通過Dockerfile創建支持SSH服務的CentOS鏡像】

 


 

第一篇是生成docker容器后,在容器中執行各種命令安裝ssh,第二篇是用Dockerfile來實現的。寫的都很清楚,這里再稍微延伸一點點。

 

1、在/root目錄下新建sshd_centos目錄用於存放Dockerfile和其他相關文件。

mkdir sshd_centos
#進入該目錄
cd sshd_centos

 

2、新建在容器中啟動sshd服務的腳本

vim run.sh

腳本內容如下:

#!/bin/bash
/usr/sbin/sshd -D

 

3、在宿主機上生成RSA密鑰

ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key

然后將生成的密鑰復制到sshd_centos目錄中

cp /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key.pub /root/sshd_centos
cat ssh_host_rsa_key.pub>authorized_keys

 

5、在/root/sshd_centos目錄下新建Dockerfile文件

vim Dockerfile

Dockerfile內容:

#生成的新鏡像以centos鏡像為基礎
FROM centos
MAINTAINER by test(test@163.com)
#升級系統
RUN yum -y update
#安裝openssh-server
RUN yum -y install openssh-server
#修改/etc/ssh/sshd_config
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
#將密鑰文件復制到/etc/ssh/目錄中
ADD ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key
ADD ssh_host_rsa_key.pub /etc/ssh/ssh_host_rsa_key.pub
RUN mkdir -p /root/.ssh
ADD authorized_keys /root/.ssh/authorized_keys
#將ssh服務啟動腳本復制到/usr/local/sbin目錄中,並改變權限為755
ADD run.sh /usr/local/sbin/run.sh
RUN chmod 755 /usr/local/sbin/run.sh
#變更root密碼為test
RUN echo "root:test"|chpasswd
#開放窗口的22端口
EXPOSE 22
#運行腳本,啟動sshd服務
CMD ["/usr/local/sbin/run.sh"]

FROM centos,指明基礎鏡像,可以先用docker search centos查看一下有哪些鏡像,這里用的是官方鏡像:


RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config 的意思是,編輯sshd的配置文件/etc/ssh/sshd_config,將其中UsePAM參數設置成“no”,

-i,直接修改並保存,
s,替換文本中的字符串
g,全面替換標記, /g 標記會替換每一行中的所有匹配,如果沒有g標記,則只有每行第一個匹配的被替換
sed命令詳見【http://man.linuxde.net/sed】
如下會匹配file文件中每一行的第一個book替換為books: 
sed -i 's/book/books/g' file
 
        

此時 /root/sshd_centos目錄下應該存在如下文件:

Dockerfile
run.sh
ssh_host_rsa_key
ssh_host_rsa_key.pub

 

6、使用docker build生成鏡像文件

docker build -t centos_sshd:v1 .

注意命令最后面是一個”.”,這說明Dockerfile是在當前目錄下。 
執行完成后,會在最后顯示類似如下:

Successfully built 21fbbc4

 

7、以新創建的鏡像新建容器

docker run -d -p 10022:22 centos_sshd:v1 /usr/local/sbin/run.sh

 

8、ssh連接容器

查看容器IP為 172.17.0.2 :

docker inspect 容器ID

 

這里其實已經接近尾聲了,但是連接容器浪費了幾乎一下午的時間,連接的時候總是如下提示:

ssh root@172.17.0.2 -p 10022
ssh: connect to host 172.17.0.2 port 10022: Connection refused

 

期間嘗試查看防火牆狀態:

service   iptables status

 

防火牆轉發規則:

iptables -t nat -nL

 

容器中的配置文件等,無果,后來嘗試了如下成功了:

ssh root@172.17.0.2 -p 22

但是明明端口綁定到了10022,為什么會出現這種情況?

原來連接容器要用宿主機的IP和綁定的端口,而不是用容器的IP,容器是宿主機的一個進程,用如下連接容器成功:

ssh root@92.168.195.1 -p 10022

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM