二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 最佳实践

  • 迎刃而解

  • Nginx

  • Php

  • Zabbix

  • AWS

  • Prometheus

  • Grafana

  • Loki

  • CentOS

  • Supervisord

  • Systemd

  • Docker

  • Docker-Compose

  • Rancher

  • Ansible

  • OpenLdap

  • GitLab

  • GitHub

  • Etcd

  • Consul

  • RabbitMQ

  • Kafka

  • Mysql

  • MongoDB

  • OpenVPN

  • Kvm

  • VMware

  • 配置文件详解

  • Other

    • 整理蓝鲸社区版3-X部署文档
    • 关于开源堡垒机jumpserver_1-2的一些体验记录
    • 防火墙基础知识之SNAT详解
    • 关于easyops的社区版与正式版两者体验之思考
    • DELL R430服务器做raid以及安装操作系统过程
    • CentOS系统安装之后的优化
    • 如何快速的批量配置某台主机对多台主机免密码登陆
      • 办法 1,传统法。
      • 办法 2,使用跳过密码法。
      • 办法 3,使用密码输入法。
    • Python-2-7的安装
    • pinpoint安装流程
    • CentOS7上Python-3-6的安装
    • 记录我与maven的故事三则
    • tomcat默认日志优化处理
    • Maven 基础知识大全汇总整理
    • 会话管理工具tmux整理
    • 使用pure-ftpd搭建ftp服务
    • 简单快速部署轻量Git服务器gogs
    • 使用athens部署企业内部Gitlab包的私服代理
    • 快速部署cerebro-v0-9-4监控es集群状态
    • 使用transfer部署一个内网上传程序
    • 认识并使用一个透明代理http-server
  • 运维观止
  • Other
二丫讲梵
2018-08-02
目录

如何快速的批量配置某台主机对多台主机免密码登陆

文章发布较早,内容可能过时,阅读注意甄别。

今天来玩个花的,不过这个花的其实在日常工作中既不被大众所熟知,却又相当重要实用的一个东东。

日常工作中可能会有这样一个需求,比如你需要往十台二十台主机上传输什么东西,或者直接说了吧,你要实现基于某台主机免密码登陆这些主机,有人可能会想到使用批量管理用 ansible 非常合适,请注意,这里说的正是实现免密码登陆的操作,也就是说,这是一个 ansible 之前的操作,或者换句话说,要想应用起来 ansible,那么首先就要把这个需求给满足了才行。

大家在往下看的时候,不妨也先想想,该如何实现这样一个需求。

我这里再描述一下需求:

那就是现在已经配置好主机 A 为 ansible 的 server 端,那么接下来需要配置 A 主机对网段内主机 IP 为 192.168.10.10–50 的主机实现免密码登陆。

image

显而易见,要想免密码登陆,那就是将主机 A 生成的公钥传输到对应的各个主机上去,在我看来,似乎有三种办法。

# 办法 1,传统法。

使用传统法,我们可以一台一台来进行ssh-copy-id root@192.168.10.10--50秘钥的传输,其中每执行一次都要输入一下对应主机的密码。这种方式耗时费力,自然不是今天的主角,也不是今天想要说的,因此就按下不表。

# 办法 2,使用跳过密码法。

这就引出了今天的第一个神器:sshpass。

事实上这款工具的操作应用也蛮广的,可在各大需要输入密码才能完成的事儿中。

关于他的用法,大概有如下几种(参考地址 (opens new window)):

使用-p参数指定登录密码

# 免密码登录
$ sshpass -p password ssh username@host

# 远程执行命令
$ sshpass -p password ssh username@host <cmd>

# 通过scp上传文件
$ sshpass -p password scp local_file root@host:remote_file

# 通过scp下载文件
$ sshpass -p password scp root@host:remote_file local_file
1
2
3
4
5
6
7
8
9
10
11

忽略 RSA Key 检查信息

第一次认证时,一般会有RSA key检查的提示:

The authenticity of host ’10.x.x.x (10.x.x.x)' can't be established.
RSA key fingerprint is a4:eb:8c:7d:2a:ef:d6:1c:a3:0c:e8:e5:00:d2:eb:60.
Are you sure you want to continue connecting (yes/no)?
1
2
3

可以使用-o StrictHostKeychecking=no选项来忽略 key 检查信息。

如:

 sshpass -p "$SSH_PASSWD" ssh root@"$host" -o StrictHostKeyChecking=no "$@" 2>/dev/null
1

OK,了解完这款神器之后,我们回到今天的主题。

image

根据如上功能,大概可以用如下脚本来实现需求:

声明:本文当中介绍的两种方案,都是基于一个前提下才能够成立的,那就是所有的这些要操作的主机登陆密码都必须保持一致(如:123456),如果您觉得非要跟我拿这个来抬杠,那我只好 “恕不奉陪”!

#!/bin/bash
#author:eryajf
#time:2018-8

for ((i=10;i<51;i++)); do
    sshpass -p "123456" ssh-copy-id  root@192.168.10.$i -o StrictHostKeyChecking=no "$@" &> /dev/null
    sleep 1
done
1
2
3
4
5
6
7
8

通过上边的脚本方式,则自动的就实现了主机 A 对远程各个主机的免密码功能。

注意:主机 A 要安装 sshpass 工具:yum -y install sshpass。

# 办法 3,使用密码输入法。

密码输入法将引出今天的第二个神器:expect。

事实上这个东东是一个非常深刻的,有厚度的,有温情的工具,以后将会有文章专门来介绍这个神器,今天只针对今天的需求来进行讲解。

于是乎,我们同样可以直接通过脚本来满足需求:

#!/usr/bin/expect -f
#author:eryajf
#time:2018-8
foreach ip {
192.168.10.1
192.168.10.2
192.168.10.3
} {
set timeout 15
spawn ssh-copy-id root@$ip
expect {
    "yes/no" {send "yes\r";}
    "password:" {send "123456\r";}
}
sleep 1
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

使用方式如下:

yum -y install expect
expect test
1
2

我不知道别人在看到这些神器的时候是如何运用的,也不知道别人在遇到像今天这样一个需求的时候是如何来考虑以及实现的,总之通过自己了解过的学过的东西,来进行灵活的运用,所谓学以致用,触类旁通,真心是一件非常快乐的事儿!

当然,如果您还有更好的办法来满足这一需求,欢迎在下方留言区留下您的方案一起探讨哦!!!

微信 支付宝
上次更新: 2024/07/04, 22:40:37
CentOS系统安装之后的优化
Python-2-7的安装

← CentOS系统安装之后的优化 Python-2-7的安装→

最近更新
01
睡着的人不关灯
06-12
02
学习周刊-总第215期-2025年第24周
06-12
03
学习周刊-总第214期-2025年第23周
06-05
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式