宿主机与docker容器之间免密码ssh链接,容器与容器之间ssh免密码连接

时间:2024-05-21 21:05:02

(1)拉取一个新的centos镜像docker pull centos:7.2

(2)运行一个容器,准备安装必要的环境

docker run --privileged  --dns 8.8.8.8 --dns 8.8.4.4 -h controler --name slurm_control  -i -t  -v /container_data/:/data centos:centos7  /bin/bash

(3)在容器内安装ssh环境

yum install wget vim

wget -0 /etc/yum.repos.d/CentOS-Base.repo  http://mirrors.aliyun.com/repo/Centos-7.repo

yum cleal all

yum install passwd

yum install openssh-server

修改容器密码(提前yum -y reinstall cracklib-dicts

echo "123456" |passwd --stdin root

产生公私钥:

ssh-****** -t rsa

cd ~/.ssh/

cp id_rsa.pub  authorized_keys

开启前准备(以下指令直接一路回车下去)

ssh-****** -t rsa -f /etc/ssh/ssh_host_rsa_key

ssh-****** -t dsa -f /etc/ssh/ssh_host_dsa_key

ssh-****** -t rsa -f /etc/ssh/ssh_host_ecdsa_key

ssh-****** -t rsa -f /etc/ssh/ssh_host_ed25519_key

/usr/sbin/sshd

退出容器,制作成新容器

Ctrl+d

Docker stop 2ba4a64c7f80

Docker commit 2ba4a64c7f80 docker_ssh

docker run --privileged -i -t docker_ssh /sbin/init (一直卡在当前界面,重新开启一个新的终端,进入容器内部打开sshd服务) 

docker exec -it af40bd07fa0f /bin/bash

systemctl restart sshd.service

echo "123456" |passwd --stdin root

netstat  -nplt|grep 22  //查看状态


yum install -y openssh-clients

6)退出容器,将宿主机的~/.ssh/id_rsa.pub拷贝到容器里的~/.ssh/authorized_keys即可免密码登录

在宿主机上执行

docker cp ~/.ssh/id_rsa.pub aea267757cc9:/root/.ssh/

宿主机与docker容器之间免密码ssh链接,容器与容器之间ssh免密码连接

进入容器后追加到容器的授权码

docker attach aea267757cc9

cat id_dsa.pub >> /root/.ssh/authorized_keys

制作完成,备份为新的镜像

docker commit aea267757cc9 ssh_docker1

docker run -d -p 221:22 --name ssh_container2 -h slaver1 -v /container_data/:/data f57ef7db72aa /usr/sbin/sshd -D

 宿主机与docker容器之间免密码ssh链接,容器与容器之间ssh免密码连接

 

在宿主机上秘密免密码连接测试

ssh -p221 [email protected]

 此时宿主机已经可以免密码登录docker容器

7)为防止docker每次启动ip变动,使用自定义网络后每次皮冻增加一个新的容器的host 列进去

docker network create --subnet=172.18.0.0/16 shadownet

slurm集群安装两个节点一个是计算节点一个是用控制,一个用来计算节点

 以同样的方式开启三台容器,controler,slaver1,slaver2,

docker run -d -p 220:22 --name ssh_container1 -h controler --net shadownet --ip 172.18.0.10 --add-host="slaver1 :172.18.0.11"  -v /container_data/:/data 0bedf27156e7 /usr/sbin/sshd -D

 

docker run -d -p 221:22 --name ssh_container2 -h slaver1 --net shadownet --ip 172.18.0.11 --add-host="controler:172.18.0.10"  -v /container_data/:/data 0bedf27156e7 /usr/sbin/sshd -D


宿主机与docker容器之间免密码ssh链接,容器与容器之间ssh免密码连接



下面开始测试容器与容器之间的测试。

之后随便进入一个容器,使用:ssh   (controler,slaver1,slaver2任意一个,)然后链接其他两台docker容器


宿主机与docker容器之间免密码ssh链接,容器与容器之间ssh免密码连接



好了,至此,所有两个环节:宿主机<----->容器,容器<------>容器之间的免密码登录工作完成