Awesome

LemonSaaS

批量免密shell脚本-乐酱出品

很多时候,运维人员在Linux上会同样的事情做一两次,但是超过三次,你不编写一个批量操作,就证明你太low了,所以今天给大家介绍一款好福利。

《批量免密shell脚本-乐酱出品》

第一、在Linux上安装expect工具

因为expect依赖tcl,所以高手都明白,tcl非装不可了。

这里乐酱提供一个CentOS版本的依赖包下载。

第二、上正餐–批量脚本

#!/bin/bash
source_dir=/home/host_uname_dir.txt
if [ ! -f ~/.ssh/id_rsa.pub ]; then
expect << EOF
    set  timeout 30
    spawn ssh-keygen -t rsa
    expect  {
        "*file in which to save the key*"  {
                 send "\n"
                 send_user "~/.ssh\r"
                 exp_continue
          }
        "*Overwrite (y/n)*"   {
                 send "y\r"
                 exp_continue
        }
        "*Enter passphrase*"  {
                 send "\n"
                 exp_continue
        }
        "*Enter same passphrase again*"   {
                 send "\n"
                 exp_continue
        }
        eof
    }
    set info [wait]
    puts  "execute_result=[lindex [set info] 3]"
EOF
    echo "create id_rsa.pub successful."
fi

while read -r line;
do
  ip=`echo $line | cut -d ":" -f1`
  uname=`echo $line | cut -d ":" -f2`
  pwd=`echo $line | cut -d ":" -f3`
expect << EOF
          set timeout 20
          spawn ssh-copy-id -i ~/.ssh/id_rsa.pub $uname@$ip
          expect   {
                "*yes/no*"  { send "yes\n";exp_continue }
                "*password*"  { send "$pwd\n";exp_continue }
                eof
          }
          set info [wait]
          puts "$ip of result=[lindex [set info] 3]"
EOF
done < "$source_dir"

for line in $(cat $source_dir)
do
   ip=`echo $line | cut -d ":" -f1`
   uname=`echo $line | cut -d ":" -f2`  
   ssh $uname@$ip  'uptime'
done

上述代码有一个”~/.ssh”可以配置id_rsa_dir=/root/.ssh进行替换。这样就更灵活哟。

本脚本在CentOS下实验过,成功。其他没有实验,相信厉害的你能调试通过!

第三、将当前用户下的.ssh目录下找到id_rsa

如果是单独脚本执行服务器免密访问其他很多机器,到这里就完了。

如果是其他语言编写的远程调用程序,直接配置免密证书路径对应当前用户的”~/.ssh/id_rsa”即可。

打赏
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

本站文章未说明转载即为原创,转载请注明来源,LemonSaaS-A » 批量免密shell脚本-乐酱出品,并请保留声明!
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注