批量拷贝公钥到指定的主机,实现免秘钥登录

本文介绍了两个bash脚本,用于批量将本地SSH公钥复制到多台远程主机,以实现SSH登录免输入密码。第一个脚本适用于所有主机使用相同密码的情况,第二个脚本则支持每台主机使用不同密码,通过交互式输入来实现。这两个脚本中包含了sshpass和expect的使用,以简化自动化部署过程。
摘要由CSDN通过智能技术生成

主机分布

一:copy公钥脚本,并且实现免输入yes

[root@ansible tmp]# cat copy-public.sh 
#!/bin/bash
PassWord=$1

rpm -qa |grep sshpass 2>&1 > /dev/null
if [ $? -ne 0 ];then
    yum -y install sshpass
fi

rpm -q expect &> /dev/null || yum -y install expect > /dev/null


if [ ! -f ~/.ssh/id_rsa ];then
    ssh-keygen -P "" -f ~/.ssh/id_rsa
fi

# 下面可以是解析名字,如果在/etc/hosts文件定义。或者使用具体ip
#for ip in {10.18.18.3,10.18.18.4,10.18.18.5}
for ip in {node01,node02,master}
do
    echo "== copy $ip pub-key to $ip is starting =="
    sshpass -p${PassWord} ssh-copy-id -i /root/.ssh/id_rsa.pub root@$ip "-o StrictHostKeyChecking=no" &> /dev/null
    if [ $? -eq 0 ];then
         echo "host $ip copy public key successed"
    fi

    expect <<EOF
    set timeout 20
    spawn scp /root/.ssh/id_rsa $ip:/root/.ssh
    expect {
        "yes/no" { send "yes\n"; exp_continue }
        "password" { send "$PassWord\n" }
    }
EOF
    scp /root/.ssh/id_rsa.pub $ip:/root/.ssh

    echo "== copy pub-key to $ip is end =="

done

#执行脚本,后面要加位置参数为密码,每一台都执行,就能实现ssh登录免输入确认yes

# 注意,这是每台密码一致。

[root@ansible tmp]# ./copy-public.sh 123456

# ssh登录免输入yes

二:优化脚本,如果主机的password都不一样,就需要使用下面的脚本。手动输入对应主机的密码。

[root@master03 ~]# cat ssh-copy.sh 
#!/bin/bash

rpm -qa |grep sshpass 2>&1 > /dev/null
if [ $? -ne 0 ];then
    yum -y install sshpass
fi

rpm -q expect &> /dev/null || yum -y install expect > /dev/null


if [ ! -f ~/.ssh/id_rsa ];then
    ssh-keygen -P "" -f ~/.ssh/id_rsa
fi

#for ip in {10.18.18.3,10.18.18.4,10.18.18.5}
for ip in {node01,node02,master}
do
    echo "== copy $ip pub-key to $ip is starting =="
    echo -n "Enter $ip password: "
    read PassWord
    sshpass -p${PassWord} ssh-copy-id -i /root/.ssh/id_rsa.pub root@$ip "-o StrictHostKeyChecking=no" &> /dev/null
    if [ $? -eq 0 ];then
         echo "host $ip copy public key successed"
    fi

    expect <<EOF
    set timeout 20
    spawn scp /root/.ssh/id_rsa $ip:/root/.ssh
    expect {
        "yes/no" { send "yes\n"; exp_continue }
        "password" { send "$PassWord\n" }
    }
EOF
    scp /root/.ssh/id_rsa.pub $ip:/root/.ssh

    echo "== copy pub-key to $ip is end =="

done

1.执行操作,拷贝公钥到定义的远程主机,实现免秘钥

#实现免输入yes登录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值