脚本实现功能:批量或单个SSH免交互登录认证

脚本应用场景:当部署集群时,大多数实现要配置好管理节点与从节点的SSH免交互登录,针对这样的情况,写了下面脚本,简化工作。

脚本支持系统:Ubuntu和CentOS

#!/bin/bash
# Description: configuration local host and remote host ssh keypair authentication, Support Ubuntu and CentOS operation system.
# Blog: http://lizhenliang.blog.51cto.comfunction color_echo() {if [ $1 == "green" ]; thenecho -e "\033[32;40m$2\033[0m"elif [ $1 == "red" ]; thenecho -e "\033[31;40m$2\033[0m"fi
}
function os_version() {local OS_V=$(cat /etc/issue |awk 'NR==1{print $1}')if [ $OS_V == "\S" -o $OS_V == "CentOS" ]; thenecho "CentOS"elif [ $OS_V == "Ubuntu" ]; thenecho "Ubuntu"fi
}
function check_ssh_auth() {if $(grep "Permission denied" $EXP_TMP_FILE >/dev/null); thencolor_echo red "Host $IP SSH authentication failure! Login password error."exit 1elif $(ssh $INFO 'echo yes >/dev/null'); thencolor_echo green "Host $IP SSH authentication successfully."firm $EXP_TMP_FILE >/dev/null
}
function check_pkg() {local PKG_NAME=$1if [ $(os_version) == "CentOS" ]; thenif ! $(rpm -ql $PKG_NAME >/dev/null 2>&1); thenecho noelseecho yesfielif [ $(os_version) == "Ubuntu" ]; thenif ! $(dpkg -l $PKG_NAME >/dev/null 2>&1); thenecho noelseecho yesfifi
}
function install_pkg() {local PKG_NAME=$1if [ $(os_version) == "CentOS" ]; thenif [ $(check_pkg $PKG_NAME) == "no" ]; thenyum install $PKG_NAME -yif [ $(check_pkg $PKG_NAME) == "no" ]; thencolor_echo green "The $PKG_NAME installation failure! Try to install again."yum makecacheyum install $PKG_NAME -y[ $(check_pkg $PKG_NAME) == "no" ] && color_echo red "The $PKG_NAME installation failure!" && exit 1fifielif [ $(os_version) == "Ubuntu" ]; thenif [ $(check_pkg $PKG_NAME) == "no" ]; thenapt-get install $PKG_NAME -yif [ $(check_pkg $PKG_NAME) == "no" ]; thencolor_echo green "$PKG_NAME installation failure! Try to install again."apt-get autoremove && apt-get updateapt-get install $PKG_NAME --force-yes -y[ $(check_pkg $PKG_NAME) == "no" ] && color_echo red "The $PKG_NAME installation failure!" && exit 1fififi
}
function generate_keypair() {if [ ! -e ~/.ssh/id_rsa.pub ]; thencolor_echo green "The public/private rsa key pair not exist, start Generating..."expect -c "spawn ssh-keygenexpect {\"ssh/id_rsa):\" {send \"\r\";exp_continue}\"passphrase):\" {send \"\r\";exp_continue}\"again:\" {send \"\r\";exp_continue}}" >/dev/null 2>&1if [ -e ~/.ssh/id_rsa.pub ]; thencolor_echo green "Generating public/private rsa key pair successfully."elsecolor_echo red "Generating public/private rsa key pair failure!"exit 1fifi
}EXP_TMP_FILE=/tmp/expect_ssh.tmpif [[ $1 =~ ^[a-z]+@[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}@.* ]]; theninstall_pkg expect ; generate_keypairfor i in $@; doUSER=$(echo $i|cut -d@ -f1)IP=$(echo $i|cut -d@ -f2)PASS=$(echo $i|cut -d@ -f3)INFO=$USER@$IPexpect -c "spawn ssh-copy-id $INFOexpect {\"(yes/no)?\" {send \"yes\r\";exp_continue}\"password:\" {send \"$PASS\r\";exp_continue}}" > $EXP_TMP_FILE  # if login failed, login error info append temp filecheck_ssh_authdone
elif [[ $1 =~ ^[a-z]+@[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}-[0-9]{1,3}@.* ]]; theninstall_pkg expect ; generate_keypairSTART_IP_NUM=$(echo $1|sed -r 's/.*\.(.*)-(.*)@.*/\1/')END_IP_NUM=$(echo $1|sed -r 's/.*\.(.*)-(.*)@.*/\2/')for ((i=$START_IP_NUM;i<=$END_IP_NUM;i++)); doUSER=$(echo $1|cut -d@ -f1)PASS=$(echo $1|cut -d@ -f3)IP_RANGE=$(echo $1|sed -r 's/.*@(.*\.).*/\1/')IP=$IP_RANGE$iINFO=$USER@$IP_RANGE$iexpect -c "spawn ssh-copy-id $INFOexpect {\"(yes/no)?\" {send \"yes\r\";exp_continue}\"password:\" {send \"$PASS\r\";exp_continue}}" > $EXP_TMP_FILEcheck_ssh_authdone
elseecho "Example1: $0 <root@192.168.1.10-15@password>"echo "Example2: $0 <root@192.168.1.10@password>"echo "Example3: $0 [root@192.168.1.10@password root@192.168.1.11@password root@192.168.1.12@password ...]"
fi

Shell批量SSH免交互登录认证相关推荐

  1. linux中ssh免密登录,Linux之SSH免密登录

    Linux 双向 SSH 免密登录 原理 双向,顾名思义,双方互通,此处的意思是多台 linux 两两免密登录.双向比单向多了些操作,单向只需把某一个linux的公钥发送给其他linux即可,而双向要 ...

  2. Shell脚本实现SSH免密登录及批量配置管理

    1.SSH免密登录及批量配置管理 场景分析 ssh免密登录 pssh工具批量管理 SHELL自动化脚本 本篇总结 场景分析 作为一个运维工程师,不是每个人工作的环境都想阿里.腾讯那样,动不动就上亿的P ...

  3. 【SSH】SSH 免密码登录配置|Secure Shell 免密认证登录|linux 生成密钥

    目录 LINUX SSH免密登录 即看即用 详细说明 免密登录原理 Secure Shell 免密认证登录 linux 生成密钥 windows 生成密钥 目录 LINUX SSH免密登录 即看即用 ...

  4. Linux运维:Shell脚本实现ssh免密登录远程服务器

    LInux系统日常运维过程中,经常需要在本地运行脚本执行对远程主机的命令,正常情况下,ssh登录远程服务器时会提示输入密码,这会影响到脚本的自动执行(因为shell脚本中没有自动填充密码的命令).有三 ...

  5. SSH免密登录(内含批量配置脚本)

    原文地址:itweknow.cn/detail?id=6- ,欢迎大家访问. 在我们的集群环境搭建过程中可能会很需要SSH免密登录,互相之间传文件只需要一个SCP命令,连密码都不用输,很方便.那么这篇 ...

  6. Shell Here Document 免交互命令和Expect

    Shell Here Document 免交互命令和Expect 一.Here Document 免交互命令 二.Expect 1.基本命令 2.示例 3.嵌入执行模式 4.实现ssh自动登录 5.免 ...

  7. Shell脚本之免交互

    Shell脚本之免交互 一.Here Document 免交互 1.1 Here Document 免交互的概念 1.2 语法格式 1.3 相关实例 二.Expect免交互 2.1 基本命令 2.2 ...

  8. Shell编程之免交互

    目录 一. Here Document免交互 1. 免交互定义 2. 语法格式 3. 应用示例 3.1 示例1 3.2 示例2 3.2 示例3 4. Here Document 变量设定 4.1 示例 ...

  9. linux 配置免密码登录,Linux - 配置SSH免密登录 - “ssh-keygen”的基本用法

    1 什么是SSH 引用百度百科的说明: SSH 为 Secure Shell的缩写,由 IETF 的网络小组(Network Working Group)所制定:它是建立在应用层基础上的安全协议. S ...

最新文章

  1. Thinkpad T420 指纹开机 win10 解决方案
  2. OpenDDS安装与开发
  3. python如何处理数据_python数据处理之如何选取csv文件中某几行的数据
  4. pytorch1.7.0 安装亲测有效
  5. Qt使用QPainter实现雷达图(玫瑰图)
  6. Diablo III 卡Checking for updates的问题解决
  7. 安全龙网络安全攻防实验1.2 全新功能正式上线
  8. 机制检验——中介检验
  9. 设置eMMC和DDR的工作频率
  10. word文档如何画线条流程图_如何在WORD中画流程图
  11. 后疫情时代,引发户外烧烤的热潮,星淘惠建议卖家可针对布局
  12. 怎么创建邮箱帐号?教育邮箱
  13. Vue在线客服系统【开源项目】
  14. 数据可视化之基础图表
  15. 房产管理系统CAD图形管理应用有哪些?
  16. CMOS反相器的工作原理和动态传输特性
  17. 多传感器融合定位(GPS+Wheel+camera)(1)-读取传感器数据
  18. AI Earth ——开发者模式案例8:利用Landsat-8数据进行地表温度反演
  19. 微型计算机主板上有哪些芯片,微机主板上装有什么
  20. web,java,poi导出excel

热门文章

  1. ADO.NET 快速入门(四):从数据库填充 DataSet
  2. 华为IPSEC-×××-典型配置举例1-采用手工方式建立IPsec 安全隧道
  3. linux中文乱码的解决
  4. cisco路由器基本实验之七 Standard Access-Lists with RIP (Boson NetSim)
  5. PHP生成随机或者唯一字符串
  6. Rift.io基于OSM发布首个商用MANO软件
  7. eclipse中查看java源代码设置方法
  8. Oracle创建数据库(手动)
  9. 一段js的***程序
  10. 内外兼备的企业blog