ssh批量免密登录

在实际生产环境中有很多地方需要用到免密登录,例如GFS分布式文件系统,ansible等。如果需要免密登录的主机数量不多,那么可用通过使用命令的方式,去对每个主机设备免密登录;如果有大量的主机需要去免密登录,那么对每个主机都设置免密登录就很烦了,这时就需要一个脚本来实现批量的免密登录

ssh免密登录原理简介

假设 PC1 想要ssh免密登录 PC2, 那么 PC1 首先需要创建密钥对(ssh-keygen -t rsa),然后将公钥拷贝到 PC2ssh-copy-id root@PC2IP地址

这时候我们就可以使用ls -lA在家目录下查看隐藏文件
在这里插入图片描述
进入.ssh目录下查看
在这里插入图片描述
假设设备15想要免密登录设备16,那么设备15里的id_rsa.pub设备16里的authorized_keys内容是相同的
在这里插入图片描述
在这里插入图片描述
ssh免密登录脚本

[root@15 ~]# vim ssh_patch.sh
#!/bin/bash
#ssh批量免密登录
#你需要新建一个host_ip.txt的文件,用于存放IP地址
#你需要修改下面的密码

password=123456

#判断有没有安装expect,没有则安装
if  ! rpm -q expect > /dev/null
then
    echo "###expect 未安装,现在安装###"
    yum install -y expect &>/dev/null
    if [ $? -ne 0 ]
    then
        echo "###expect 安装失败###"
        exit 1
    fi
fi

#生成ssh密钥对
/usr/bin/expect <<-EOF
spawn ssh-keygen -t rsa
expect "(/root/.ssh/id_rsa)" {send "\r"}
expect "(empty for no passphrase)" {send "\r"}
expect "again" {send "\r"}
expect eof
EOF

#从host_ip.txt文件中获取主机IP地址信息
for IP in $(more host_ip.txt)
do
if [ -n $IP ]
then
/usr/bin/expect <<-EOF
spawn ssh-copy-id root@$IP
expect "yes/no" {send "yes\r"}
expect "password" {send "$password\r"}
expect eof
EOF
else
        echo "The IP is NULL !!!"
fi
  done

将需要免密登录的主机IP输入到host_ip.txt里面,格式为每行一个IP地址

[root@15 ~]# vi host_ip.txt

20.0.0.26
20.0.0.27

执行脚本有两种方式,一种是信息显示出来,一种信息不显示出来,如果主机很多可以使用第二种

① 直接执行脚本,执行信息显示出来,有大量信息,可以看到报错信息

. ssh_patch.sh

② 重定向输出到 /dev/null,没有信息显示

. ssh_patch.sh &> /dev/null

查看成功免密登录的主机

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值