单服务器多个docker容器之间免密登录

单个服务器中多个容器之间配置免密登录

普通容器做法

  1. 以ubuntu:16.04的镜像作为基础

    docker pull ubuntu:16.04
    
  2. 启动容器
    创建两个容器,分别命名为ub1和ub2

    分别在两个终端下执行该命令

    docker run -it --name ub1 you_IMAGE_ID;
    docker run -it --name ub2 you_IMAGE_ID;
    
  3. 安装必要组件

    # 更新软件源,默认是没有的
    apt-get update
    
    # 安装必要组件
    apt -y install vim gcc ssh
    
  4. 修改ssh配置

    vim /etc/ssh/sshd_config
    
    # 修改如下配置项内容,确保与下面的内容一样
    # Authentication:
    LoginGraceTime 120
    PermitRootLogin yes
    StrictModes yes
    
    RSAAuthentication yes
    PubkeyAuthentication yes
    
    # 重启ssh服务
    service ssh restart
    
  5. 更新密码
    docker容器初始没有设置密码,我们先设置一个密码

    paswd
    
    # 显示
    Enter new UNIX password: 
    Retype new UNIX password:
    
    # 输入两遍想要的密码就可以了
    
  6. 生成密钥
    该步骤每台机器都需要做

    ssh-keygen -t rsa
    
    # 进入~/.ssh目录
    cd ~/.ssh
    
    # 生成两个文件
    id_rsa  id_rsa.pub
    
    # 将id_rsa.pub追加到authorized_keys
    cat id_rsa.pub >> authorized_keys
    
  7. 配置免密登录
    两台机器均需要做

    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

全部评论

相关推荐

点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务