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

查看成功免密登录的主机

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50345511/article/details/112657429