ssh在Docker容器間建立互信

2021-09-29 15:53:50 字數 4268 閱讀 1514

方案1:使用docker自定義網路

前提1 關閉防火牆

sudo systemctl stop firewalld.service       #停止firewall

sudo systemctl disable firewalld.service    #禁止firewall開機啟動

3 安裝docker

1 自定義網路

由於容器的網路是在啟動時由docker engine配置的,所以造成容器的ip位址不固定。

可以自定義網路使容器使用固定ip,並且重啟後ip不會變,檔案/etc/hosts 也不會被重置。

$docker network create --subnet=172.18.0.0/16 mynetwork

$docker network ls

自定義mynetwork網路

2 構建基礎映象

執行centos映象啟動乙個容器,安裝依賴庫和必要軟體,提交新的映象basepbs/centos

$docker run –it centos

$yum install -y openssh-clients

$yum install -y net-tools

$yum install -y vim

$yum install -y which

$exit

$docker commit  basepbs/centos

構建基礎映象

3 構建容器

3.1 建立三個容器

使用basepbs/centos映象建立三個容器,分別指定映象名稱,hostname,新增/etc/hosts中的資料,指定自定義網路以及ip

容器名稱     容器hostname            ip

pbs1              pbs1                       172.18.0.3

pbs2              pbs2                       172.18.0.4

pbs3              pbs3                       172.18.0.5

$docker run -tid --name pbs1 -h pbs1 --add-host pbs1:172.18.0.3 --add-host pbs2:172.18.0.4 --add-host pbs3:172.18.0.5 --net=mynetwork --ip=172.18.0.3 basepbs/centos

$docker run -tid --name pbs2 -h pbs2 --add-host pbs1:172.18.0.3 --add-host pbs2:172.18.0.4 --add-host pbs3:172.18.0.5 --net=mynetwork --ip=172.18.0.4 basepbs/centos

$docker run -tid --name pbs3 -h pbs3 --add-host pbs1:172.18.0.3 --add-host pbs2:172.18.0.4 --add-host pbs3:172.18.0.5 --net=mynetwork --ip=172.18.0.5 basepbs/centos

3.2 修改ssh配置檔案

pbs1配置

#執行如下命令

$yum install passwd openssl openssh-server

$/usr/sbin/sshd    

#報錯檔案不存在,執行以下命令

$ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -n ''

$ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -n ''

$ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -n ''

#生成rsa隨機圖,修改 /etc/ssh/sshd_config 配置資訊:

#usepam yes 改為 usepam no

#useprivilegeseparation sandbox 改為 useprivilegeseparation no

#具體執行如下:

$sed -i "s/#useprivilegeseparation.*/useprivilegeseparation no/g" /etc/ssh/sshd_config

$sed -i "s/usepam.*/usepam no/g" /etc/ssh/sshd_config

#啟動sshd

$/usr/sbin/sshd

#檢視ssh服務是否啟動成功

$ps -ef | grep ssh

#修改root密碼

$passwd

......

#生成密碼對

$ssh-keygen -t rsa

#檢視生成的私鑰idrsa和公鑰idrsa.pub

$cd ~/.ssh/

#檢視ssh服務是否啟動成功

$ps -ef | grep ssh12

345pbs2配置

$ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -n ''

$ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -n ''

$ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -n ''

$sed -i "s/#useprivilegeseparation.*/useprivilegeseparation no/g" /etc/ssh/sshd_config

$sed -i "s/usepam.*/usepam no/g" /etc/ssh/sshd_config

$/usr/sbin/sshd

$ps -ef | grep ssh

$passwd

$ssh-keygen -t rsa

$cd ~/.ssh/

$ps -ef | grep ssh

$/usr/sbin/sshd

#將pbs2的公鑰傳送到pbs1上

$scp id_rsa.pub root@pbs1:~/.ssh/id_rsa.pub.pbs2

pbs3配置

$ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -n ''

$ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -n ''

$ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -n ''

$sed -i "s/#useprivilegeseparation.*/useprivilegeseparation no/g" /etc/ssh/sshd_config

$sed -i "s/usepam.*/usepam no/g" /etc/ssh/sshd_config

$/usr/sbin/sshd

$ps -ef | grep ssh

$passwd

$ssh-keygen -t rsa

$cd ~/.ssh/

$ps -ef | grep ssh

$/usr/sbin/sshd

#將pbs3的公鑰傳送到pbs1上

$scp id_rsa.pub root@pbs1:~/.ssh/id_rsa.pub.pbs3

3.3 生成authorized_keys

進入~/.ssh/,合併id_rsa.pub.*到authorized_keys中,然後再傳送到pbs2、pbs3的~/.ssh/

$cd ~/.ssh/

$cat id_rsa.pub >> authorized_keys

$cat id_rsa.pub.pbs2 >> authorized_keys

$cat id_rsa.pub.pbs3 >> authorized_keys

$scp authorized_keys root@pbs2:~/.ssh/

$scp authorized_keys root@pbs3:~/.ssh/

至此,配置ok!

4 截圖

三個容器ip

ssh連線

5 預留問題

在重啟容器的時候ssh服務需要再次開啟

$/usr/sbin/sshd

$ps -ef | grep ssh

方案2:使用host網路模式

ssh登入Docker容器

1.登入容器中,修改root密碼,安裝openssh服務 docker exec it u web bin bash passwd 修改容器中系統root賬戶的密碼 yum y install openssh 安裝openssh服務2.修改ssh配置檔案以下選項,去掉 注釋,將四個選項啟用 root...

詳解Docker建立支援ssh服務的容器和映象

1.這裡使用的centos作為容器,所以首先 centos的images sudo docker pull centos 2.後執行乙個centos的容器,這裡使用centos6作為我測試的容器 sudo docker run name centos ssh i t centos centos6 b...

Docker 容器間通訊

name 給執行的容器起乙個名字 docker run d name web tomcat 執行centos 必須進入互動介面 it 進入互動模式 docker run d name database it centos bin bash inspect 檢視docker內部原始檔案。docker ...