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

本文介绍了如何在Linux环境中批量实现SSH免密码登录,主要涉及两种方法:使用sshpass命令行工具和利用expect脚本。这两种方法都可以避免手动输入密码,提高效率,尤其适用于需要频繁连接多台主机的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

我这里再描述一下需求:

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

显而易见,要想免密码登陆,那就是将主机 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

忽略 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)?

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

如:

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

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

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

#!/bin/bash
#author:fuwei
#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

通过上边的脚本方式,则自动的就实现了主机 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
}

使用方式如下:

yum -y install expect
expect test

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN-FuWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值