Shell批量SSH免交互登录认证
脚本实现功能:批量或单个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免交互登录认证相关推荐
- linux中ssh免密登录,Linux之SSH免密登录
Linux 双向 SSH 免密登录 原理 双向,顾名思义,双方互通,此处的意思是多台 linux 两两免密登录.双向比单向多了些操作,单向只需把某一个linux的公钥发送给其他linux即可,而双向要 ...
- Shell脚本实现SSH免密登录及批量配置管理
1.SSH免密登录及批量配置管理 场景分析 ssh免密登录 pssh工具批量管理 SHELL自动化脚本 本篇总结 场景分析 作为一个运维工程师,不是每个人工作的环境都想阿里.腾讯那样,动不动就上亿的P ...
- 【SSH】SSH 免密码登录配置|Secure Shell 免密认证登录|linux 生成密钥
目录 LINUX SSH免密登录 即看即用 详细说明 免密登录原理 Secure Shell 免密认证登录 linux 生成密钥 windows 生成密钥 目录 LINUX SSH免密登录 即看即用 ...
- Linux运维:Shell脚本实现ssh免密登录远程服务器
LInux系统日常运维过程中,经常需要在本地运行脚本执行对远程主机的命令,正常情况下,ssh登录远程服务器时会提示输入密码,这会影响到脚本的自动执行(因为shell脚本中没有自动填充密码的命令).有三 ...
- SSH免密登录(内含批量配置脚本)
原文地址:itweknow.cn/detail?id=6- ,欢迎大家访问. 在我们的集群环境搭建过程中可能会很需要SSH免密登录,互相之间传文件只需要一个SCP命令,连密码都不用输,很方便.那么这篇 ...
- Shell Here Document 免交互命令和Expect
Shell Here Document 免交互命令和Expect 一.Here Document 免交互命令 二.Expect 1.基本命令 2.示例 3.嵌入执行模式 4.实现ssh自动登录 5.免 ...
- Shell脚本之免交互
Shell脚本之免交互 一.Here Document 免交互 1.1 Here Document 免交互的概念 1.2 语法格式 1.3 相关实例 二.Expect免交互 2.1 基本命令 2.2 ...
- Shell编程之免交互
目录 一. Here Document免交互 1. 免交互定义 2. 语法格式 3. 应用示例 3.1 示例1 3.2 示例2 3.2 示例3 4. Here Document 变量设定 4.1 示例 ...
- linux 配置免密码登录,Linux - 配置SSH免密登录 - “ssh-keygen”的基本用法
1 什么是SSH 引用百度百科的说明: SSH 为 Secure Shell的缩写,由 IETF 的网络小组(Network Working Group)所制定:它是建立在应用层基础上的安全协议. S ...
最新文章
- Thinkpad T420 指纹开机 win10 解决方案
- OpenDDS安装与开发
- python如何处理数据_python数据处理之如何选取csv文件中某几行的数据
- pytorch1.7.0 安装亲测有效
- Qt使用QPainter实现雷达图(玫瑰图)
- Diablo III 卡Checking for updates的问题解决
- 安全龙网络安全攻防实验1.2 全新功能正式上线
- 机制检验——中介检验
- 设置eMMC和DDR的工作频率
- word文档如何画线条流程图_如何在WORD中画流程图
- 后疫情时代,引发户外烧烤的热潮,星淘惠建议卖家可针对布局
- 怎么创建邮箱帐号?教育邮箱
- Vue在线客服系统【开源项目】
- 数据可视化之基础图表
- 房产管理系统CAD图形管理应用有哪些?
- CMOS反相器的工作原理和动态传输特性
- 多传感器融合定位(GPS+Wheel+camera)(1)-读取传感器数据
- AI Earth ——开发者模式案例8:利用Landsat-8数据进行地表温度反演
- 微型计算机主板上有哪些芯片,微机主板上装有什么
- web,java,poi导出excel