在使用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了,希望能帮助到需要的朋友。

docker笔记--容器之间如何互相免密?的更多相关文章

  1. [Docker] - 不同容器之间相互访问的实现方式(例如:Client 访问 DB)

    部署了两个独立的容器: Container #1 - Web ClientContainer #2 - SQL Server 不同容器间如何互访? 无法从 Container #1 访问到 Conta ...

  2. centos之间如何实现免密ssh登陆

    在公司产品中,管理平台和下面的主机很多时候都要求免密,免密的逻辑到底是怎么样的呢?今天就简单看看! 首先创建两台虚机,正常情况下ssh登陆对方是需要密码的 先通过ssh-keygen生成一对秘钥 [r ...

  3. 大数据【一】集群配置及ssh免密认证

    八月迷情,这个月会对大数据进行一个快速的了解学习. 一.所需工具简介 首先我是在大数据实验一体机上进行集群管理学习,管理五台实验机,分别为master,slave1,slave2,slave3,cli ...

  4. Ubuntu如何配置SSH免密登录

    前言 在搭建hadoop集群时,需要主机和副机之间实现SSH免密登录 一.环境准备 1.ubuntu两台 二.安装SSH 1.首先检测一下本机有没有安装SSH服务,如果没有任何打印说明未安装 sudo ...

  5. linux配置 ssh 免密 登录

    1:第一步给每一台电脑生成公私钥 使用   在 root 目录下面 使用  ssh-keygen -t rsa ,然后不停敲回车.就可以生成公私钥.默认放在  .ssh 目录下面. 2:进入.ssh ...

  6. [提供可行性脚本] RHEL/CentOS 7 多节点SSH免密登陆

    实验说明: 在自动化部署时,会经常SSH别的机器去操作,然而每次的密码认证却很令人烦躁,尤其是很长的密码,因此SSH免密登陆就显得必不可少: 在机器数目很多的时候,使用更过的往往是Ansible分发并 ...

  7. 宿主机ssh免密登录docker容器

    一.检查系统内核 二.安装docker 1.yum install docker  -y 2.docker version                    #查看docker版本 3.syste ...

  8. Docker学习笔记 - Docker容器之间的连接

    学习目标: 容器之间可以相互连接访问:: --link redis:redisAlias 准备工作 FROM ubuntu:14.04 RUN apt-get install -y ping RUN  ...

  9. docker ssh秘钥免密登录

    一.概述 有一台跳板机,已经实现了免密登录后端服务器.但是我写了一个django项目,它是运行在容器中的,也需要免密登录后端服务器. 虽然可以在容器中手动做一下免密登录,但是容器重启之后,之前做的设置 ...

随机推荐

  1. jquery easyui form表单一开始就自动启用验证了,修改为form提交的时候在开启验证

    <form method="post" action="<%=path %>" class="easyui-form" d ...

  2. C# Winform 调试时某些项目不会自动重新生成

    右键启动项目→生成依赖性→项目依赖项 →勾选没有重新生成的项目

  3. .netCore 动态织入

    using Microsoft.Extensions.DependencyInjection; using System; using System.Reflection; namespace Aop ...

  4. openstack-neutron(2)

    VXLAN 独立于底层的网络拓扑:反过来,两个 VTEP 之间的底层 IP 网络也独立于 VXLAN.VXLAN 数据包是根据外层的 IP header 路由的,该 header 将两端的 VTEP ...

  5. ReactNative报错null is not an object (evaluating '_rngesturehandlermodule.default.direction')

    程序报错: null is not an object (evaluating 'rngesturehandlermodule.default.direction') 解决: react-native ...

  6. UI5-技术篇-Expand与Deep 服务测试

    1.SEGW创建服务 2.创建Data Model 2.1Entity Types ZRICO_USR 设置主键.排序字段.过滤字段 ZRICO_USRITM设置主键  2.2Associations ...

  7. cookie和session以及iOS cookie的查取

    Cookie的工作原理 http是无状态的,这是什么意思呢?就是说,在没有cookie之前,你第一次访问这个页面和第二次访问这个页面, 服务器是不知道的,不知道前一次是你.那么问题来了,我怎么登录,登 ...

  8. Linux文件(夹)属性

    ll  或者 ls -lh 查看文件属性:

  9. git pull 的时候 把本地的修改 覆盖远程端

    首先,git pull 可以分成两步,git fetch 和git merge 使用git branch -a可以看出来    git merge 相当于当前分支  和 origin/master分支 ...

  10. vue 打印html

    1.https://github.com/xyl66/vuePlugs_printjs从这个路径下载print.js.放到你的代码中 2.我是放到我本地一个js文件中. 3.引入当前文件 //打印插件 ...