zoukankan      html  css  js  c++  java
  • docker笔记--容器之间如何互相免密?

    在使用docker搭建hadoop分布式集群的时候,需要各容器之间相互免密登录,传统的方式我想或许会很麻烦,特别是当容器达到几百上千台的时候,这时就需要有一种方式来更简单实现免密登录了。

    环境介绍:

    宿主机:centos 7

    docker 版本:18.09.0

    镜像版本:ubuntu:14.04(官方镜像,无ssh,需要自行安装)

    方法一:

          怎么说呢,第一种方法不是不可以,但很麻烦。这里只是说一下方法:

    当容器创建完成以后,拷贝容器里面的主机名和ip映射关系到本地host.file文件,通过这个host.file文件远程到容器执行ssh-keygen命令生成秘钥,然后把每一个容器生成的秘钥拷贝到宿主机的authorized_file,最后把host.file文件上传到容器里面/etc/hosts下,把authorized-file文件拷贝到容器的~/.ssh/authorized_keys,当然,这个需要脚本实现,比较麻烦。其实也可以用docker自带的--add-host命令。下面介绍一种更简单的方式

    方法二:

    (1)因为官方的ubuntu镜像没有ssh,所以需要在ubuntu里面安装,这里有两种方法,第一种是通过Dockerfile文件,第二种是先docker run 然后安装完ssh在执行doxker commit。我这里使用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

    列:

    进入到容器查看hosts文件:

    看到没有,这里并没有做ip与主机的映射,接下来ssh 到yjt1 或者 yjt2 试试效果:

    到此,docker容器互相免密就OK了,希望能帮助到需要的朋友。

  • 相关阅读:
    JS制作图表
    把图片存入数据库
    .NET各种小问题
    JS各种小问题
    JS操作cookie
    JS处理Json数据
    git与svn的区别
    关于java中的一些循环
    java基础面试(上)
    Spring事务
  • 原文地址:https://www.cnblogs.com/yjt1993/p/9984764.html
Copyright © 2011-2022 走看看