Linux shell (ssh批量配置免秘)读取配置文件,进行远程操作

需要目标机器安装有 expect 命令

分成五个文件config.ini(配置文件)、id_ras.pub(公钥)、read.sh(一个函数,用于读取配置文件)、test.sh(执行文件)、run.sh(远程运行脚本) 是一个配置文件.

步骤1:读取配置文件 ip,user,pwd

步骤2:将id_rsa.pub、run.sh scp到远程机器上

步骤3:远程运行脚本

read.sh

#!/bin/bash

GetKey(){
    section=$(echo $1 |cut -d ‘.‘ -f 1)
    key=$(echo $1 |cut -d ‘.‘ -f 2)
    if [ "$section"x = "ip"x ];then
        nub=`cat config.ini | grep -n "$key={" |awk -F ":" ‘{print $1}‘`
        nue=`cat config.ini | grep -n "}" |awk -F ":" ‘{print $1}‘`
        nub=`expr $nub +1`
        for i in $nue
        do
            if [ $i -gt $nub ]; then
                a=$i
                break
            fi
        done
        nue=`expr $a -1`
        sed -n "$nub,$nue p" config |sed s/,//g
    else
        sed -n "/\[$section\]/,/\[.*\]/{
         /^\[.*\]/d
         /^[ \t]*$/d
         /^$/d
         /^#.*$/d
         s/^[ \t]*$key[ \t]*=[ \t]*\(.*\)[ \t]*/\1/p
        }" config.ini
} 

run.sh

#!/bin/bash

Create(){
    /usr/bin/expect -c"
    set timeout 30
    spawn ssh-keygen -t rsa
    expect \":\"
    send \"\r\"
    expect \":\"
    send \"\r\"
    expect \":\"
    send \"\r\"
    expect eof
    exit
    "
}

if [ ! -d .ssh ];then
    Create
    if [ $? != 0 ];then
        echo "step for create failed"
        exit 0
    else
        cat id_rsa.pub >> .ssh/authorized_keys
        if [ $? != 0 ];then
            echo "step for cp failed"
            exit 0
        fi
    fi
else
    cat id_rsa.pub >> .ssh/authorized_keys
    if [ $? != 0 ];then
        echo "step for cp failed"
        exit 0
    fi
fi

test.sh

#!/bin/bash
. ./read.sh

ip=$(GetKey "ip.ip")
passwd=$(GetKey "pass.passwd")
user=$(GetKey "user.usr")

for i in $ip
do
/usr/bin/expect -c"
set timeout10
spawn /usr/bin/scp -r run.sh [email protected]$i
expect \"password:\" {send \"$passwd\r\"}
spawn /usr/bin/scp -r id_rsa.pub [email protected]$i
expect \"password:\" {send \"$passwd\r\"}
expect eof
exit
"
/usr/bin/expect << EOF
set timeout 10
spawn ssh [email protected]$i
expect "password:"
send "$passwd\r"
expect "]"
send "sh run.sh\r"
send "exit\r"
expect eof
EOF
done

配置文件

[ip]
ip={
12.23.31.114
,21.34.54.112
}

[user]
usr=hehehe

[pass]
passwd=wohehehda
时间: 2024-10-06 09:59:10

Linux shell (ssh批量配置免秘)读取配置文件,进行远程操作的相关文章

linux为网卡批量配置连续IP

新加了一块网卡 cat /etc/udev/rules.d/70-persistent-net.rules 查看到网卡信息如下# PCI device 0x1022:0x2000 (pcnet32)SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:aa:49:a0", ATTR{type}=="1", KERNE

SSH原理与运用(二):远程操作与端口转发

本问转载自  http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html SSH原理与运用(二):远程操作与端口转发 作者: 阮一峰 日期: 2011年12月23日 接着前一次的文章,继续介绍SSH的用法. ======================================= 作者:阮一峰 (Image credit: Tony Narlock) 七.远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行

[转帖]SSH原理与运用(二):远程操作与端口转发

SSH原理与运用(二):远程操作与端口转发 http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html 接着前一次的文章,继续介绍SSH的用法. ======================================= SSH原理与运用(二):远程操作与端口转发 作者:阮一峰 (Image credit: Tony Narlock) 七.远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作. 上一节的操

Linux之间配置免秘钥访问

环境说明 [[email protected] ~]# cat /etc/redhat-release CentOS release 6.5 (Final) [[email protected] ~]# uname -a Linux localhost1 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 生成秘钥 [[email protected] ~]# ssh-k

ssh、scp免秘钥远程执行命令:expect

首先安装expect # yum -y install expect 命令格式 # ./expect IP COMM    #expect是独立的工具,所以不能用sh来执行 #!/usr/bin/expect set timeout -1    #超时时间默认10秒,如果你要执行一条很漫长的命令,那么这个很有必要,这里将超时时间设置为永不超时 set COMMADN1 [lindex $argv 0]    #传参变量,这里引用脚本后面的第一个参数 set COMMADN2 [lindex $a

SSH框架系列:Spring读取配置文件以及获取Spring注入的Bean

分类: [java]2013-12-09 16:29 1020人阅读 评论(0) 收藏 举报 1.简介 在SSH框架下,假设我们将配置文件放在项目的src/datasource.properties路径下,Spring的配置文件也是src/applicationContext.xml路径下,那么我们可以借助Spring的property-placeholder读取配置文件,然后注入Bean中.我们在程序中,可以根据Bean的Id,获取注入的值.这样我们就可以借助Spring来读取配置文件. 2.

Linux使用ssh公钥实现免密码登录Linux

ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 有机器A(192.168.1.155),B(192.168.1.181).现想A通过ssh免密码登录到B.首先以root账户登陆为例. 1.在A机下生成公钥/私钥对. [[email protected] ~]# ssh-keygen -t rsa -P '' -P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车.该命令将在/root

Linux Shell ssh登录脚本

Linux 登陆服务器敲命令太多,某时候确实不便,所以就用shell写了一个 一.说明 支持秘密和密钥两种格式 用户名和密码都是写文件的,明文保存 二.配置 密码文件配置: 序号:IP:端口:用户:密码:说明 1:192.168.88.128:22:root:toor:虚拟机web服务器 密钥文件放在keys文件夹下,密码位置写成密钥文件名,文件名必须以.pem结尾 github地址:https://github.com/ca0gu0/so 脚本下载:git clone [email prote

Linux shell下批量创建缩略图

一.背景 今天,突然发现手机客户端上的最新新闻缩略图都不显示了,上服务器上看了看, 发现新的新闻图片根本没有生成缩略图. 这套新闻发布系统是很老的程序了,查了一下,问题的原因是不支持png格式的图片,也就是说如果大图传的是png格式的,就不生成缩略图. 二.解决办法 由于都下班了,也没时间去修改程序源码了,只能在服务器上,临时把所有的png原图,再重新生成一遍缩略图. 正好,这台服务器上安装了 imagemagick 这套很强大的图像处理程序,可以很方便的生成缩略图, 于是写个shell脚本,批