当有N台服务器,需要互相登录或者scp(sftp)、ssh 一些操作,可以利用for循环对ip文件,进行逐行ip操作。
注:后期完善问题!如果需要文件路径变量或者是脚本路径变量,可直接到.bash_profile中,利用if判断对文件为位置或其他变量进行变更!!!
下面以秘钥进行轮训操作:
ssh-copy-id
流程:
- 生产秘钥对
- 脚本推送公钥
第一步,生成秘钥对
百度,或者我前面的文章
ssh-keygen -t rsa
第二步,IP地址文件:ip.txt
注:担心密码泄露可以使用gpg进行加密!!!脚本自行解密,执行完脚本再执行删除操作!!!(gpg加密特性,加密用户可直接解密,其他用户解密需输入密码)
#演示文件
#IP地址 用户名 密码
192.168.68.137 root 123456789
192.168.1.102 test2 123456
192.168.1.103 test3 123456
#192.168.1.104 test4 123456
第三步,脚本
注:传送秘钥依然要输入密码,文本添加密码是方便你复制粘贴
注:脚本会自动过滤ip.txt中#开头的行,如果不想传输某个ip可以#直接注释!
#!/bin/bash
read -p "输入IP文件路径:" IPFILE
LOGPATH=~/rsa.log
echo "$IPFILE"
#统计ip.txt行数
IPSUM=`cat $IPFILE| wc -l`
IPSUM1=`cat $IPFILE|grep -v "^#"|wc -l`
echo "共计IP个数为:$IPSUM1 "
LINE=@
for i in `seq $IPSUM`
do
sed -n "$i"p $IPFILE |grep "^#" >/dev/null
if [ ! $? -eq 0 ];then
IPADD=`sed -n ${i}p $IPFILE |awk '{print $1}'`
IPUSER=`sed -n ${i}p $IPFILE |awk '{print $2}'`
IPPWD=`sed -n ${i}p $IPFILE |awk '{print $3}'`
echo -e "\e[33m 主机地址:$IPADD 主机用户名:$IPUSER 主机密码:$IPPWD \e[0m"
#查看主机是否存活
ping -c 1 $IPADD > /dev/null 2>&1
if [ $? -eq 0 ];then
#存活传送秘钥
ssh-copy-id -i /root/.ssh/id_rsa.pub $IPUSER$LINE$IPADD
if [ $? -eq 0 ];then
echo "秘钥传送成功!"
echo "!!!秘钥传送成功:$IPADD" >> $LOGPATH
else
echo "秘钥传送失败!"
echo "秘钥传送失败:$IPADD" >> $LOGPATH
fi
else
echo "主机未存活:$IPADD"
echo "主机未存活:$IPADD" >> $LOGPATH
fi
echo "------------------------------------------------------------------------------------"
fi
let i++
done
echo -e "\e[33m 日志路径:$LOGPATH \e[0m"
图例有错误,后面的“主机用户”实际是“主机密码”,懒得截图了。
发表评论