单个服务器中多个容器之间配置免密登录
普通容器做法
-
以ubuntu:16.04的镜像作为基础
docker pull ubuntu:16.04
-
启动容器
创建两个容器,分别命名为ub1和ub2分别在两个终端下执行该命令
docker run -it --name ub1 you_IMAGE_ID; docker run -it --name ub2 you_IMAGE_ID;
-
安装必要组件
# 更新软件源,默认是没有的 apt-get update # 安装必要组件 apt -y install vim gcc ssh
-
修改ssh配置
vim /etc/ssh/sshd_config # 修改如下配置项内容,确保与下面的内容一样 # Authentication: LoginGraceTime 120 PermitRootLogin yes StrictModes yes RSAAuthentication yes PubkeyAuthentication yes # 重启ssh服务 service ssh restart
-
更新密码
docker容器初始没有设置密码,我们先设置一个密码paswd # 显示 Enter new UNIX password: Retype new UNIX password: # 输入两遍想要的密码就可以了
-
生成密钥
该步骤每台机器都需要做ssh-keygen -t rsa # 进入~/.ssh目录 cd ~/.ssh # 生成两个文件 id_rsa id_rsa.pub # 将id_rsa.pub追加到authorized_keys cat id_rsa.pub >> authorized_keys
-
配置免密登录
两台机器均需要做cd ~/.ssh scp id_rsa.pub root@另一台机器的IP:~/.ssh/lin.pub
此时,会提示你是否确认,输入
yes
,再输入你刚刚设置的密码即可进入另一台主机
cd ~/.ssh cat lin.pub >> authorized_keys
在另一台机器上重复这一遍步骤即可
Dockerfile做法
该方法请系统学习或详细了解docker的人员使用
dockerfile文件
FROM ubuntu:14.04
MAINTAINER yjt xxx
RUN sudo apt-get update && \
sudo apt-get install -y net-tools openssh-server psmisc iproute wget vim
RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' && cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys && \
sed -i 's/PermitEmptyPasswords yes/PermitEmptyPasswords no /' /etc/ssh/sshd_config && \
sed -i 's/PermitRootLogin without-password/PermitRootLogin yes /' /etc/ssh/sshd_config && \
echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config && \
echo " UserKnownHostsFile /dev/null" >> /etc/ssh/ssh_config && \
echo "root:1234" | chpasswd
CMD [ "sh", "-c", "sudo service ssh start; bash"]
接下来,命令行执行:
# docker build -t ubuntu-ssh .
通过刚刚生成的镜像启动两台容器:
# docker run -it --rm --name=yjt1 --net mynetwork --ip 172.20.1.1 --privileged ubuntu-ssh
# docker run -it --rm --name=yjt2 --net mynetwork --ip 172.20.1.2 --privileged ubuntu-ssh
进入到某一台容器执行 ssh yjt1 或者ssh yjt2 如果能成功的免密登录,那说明OK