建立基於ssh的能夠免密碼登陸的docker鏡像

         通常狀況下,linux系統管理員經過ssh服務來管理操做系統,可是docker的不少鏡像是不帶ssh服務的,那麼咱們怎麼樣才能管理操做系統呢?linux

         咱們學過attach ,exec的命令進入容器的方法,可是都沒法解決遠程管理容器的問題,所以,咱們須要遠程登陸到容器內進行一些操做的時候,就須要ssh的支持了。docker

如下的鏡像基於docker commit命令建立。ubuntu

1. 首先使用ubuntu:14.04建立一個一個容器

docker run -it  -v /opt/ssh:/opt/ssh ubuntu:14.04 /bin/bash

解釋一下:緩存

        基於ubuntu的14.04版本的鏡像啓動一個容器安全

        -it是爲了讓docker分配一個僞終端,並綁定到標準輸入上,且讓容器的標準輸入保持打開。bash

        -v 後面的是將本地的/opt/ssh目錄掛到容器的/opt/ssh上面去(若是容器裏面的/opt下面沒有ssh目錄,則直接會建立ssh目錄),是爲了將宿主機上面的文件拷貝到容器裏面去。(主要是爲了將authorized_keys文件從宿主機拷貝到容器中的去)session

2.默認沒有sshd服務,安裝sshd服務

apt-get install  openssh-server

通常會失敗,這是由於ubuntu官方鏡像中並無包含軟件包的緩存文件,使用以下命令來更新軟件源信息:ssh

apt-get update

再使用ui

apt-get install  openssh-server

完成安裝ssh服務了。spa

3.啓動ssh服務

要正常啓動ssh服務,須要目錄/var/run/sshd存在,手動建立它,並啓動服務:

mkdir -p  /var/run/sshd

/usr/sbin/sshd -D &

此時查看容器的22端口,已經處於監聽狀態:

netstat -untlp

4.配置ssh服務

修改ssh服務的安全登陸配置,取消pam登陸限制:

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

將宿主機上面的authorized_keys拷貝到容器的/root/.ssh下面。

由於容器裏面的/opt/ssh映射到了宿主機的/opt/ssh文件夾,因此宿主機的/opt/ssh裏面的東西,都會在容器的/opt/ssh下面。

因此能夠將該文件拷貝過去。

而後建立自動啓動SSH服務的可執行文件run.sh,並添加可執行權限:

run.sh

#!/bin/bash

/usr/sbin/sshd -D

最後,退出容器

exit

5.保存鏡像

將所退出的容器用docker commit命令保存爲一個新的sshd:ubuntu鏡像(個人例子中成功了ssh免密碼登陸的是sshd3:ubuntu):

docker  commit  容器id  sshd:ubuntu

而後就可使用docker images查看本地生成的新鏡像sshd:ubuntu.

6.使用鏡像

       啓動容器,並添加端口映射10022 ---》22。其中10022是宿主機的端口,22是容器的ssh服務監聽端口:

docker run  -p  10022:22  -d  sshd:ubuntu  /run.sh

7.遠程鏈接容器,來管理容器

能夠在宿主機和其餘遠程主機上,能夠經過ssh訪問10022端口來登陸容器:

我是在其餘的遠程主機上面來登陸的

容器的宿主機是172.16.81.99

而想要ssh登陸的主機是172.16.81.104

能夠看獲得咱們成功從172.16.81.104免密碼登陸到172.16.81.99的ubuntu容器裏面去了。能夠管理這個容器了。

相關文章
相關標籤/搜索