需要目标机器安装有 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 $ |cut -d '.' -f )
key=$(echo $ |cut -d '.' -f )
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 +`
for i in $nue
do
if [ $i -gt $nub ]; then
a=$i
break
fi
done
nue=`expr $a -`
sed -n "$nub,$nue p" config |sed s/,//g
else
sed -n "/\[$section\]/,/\[.*\]/{
/^\[.*\]/d
/^[ \t]*$/d
/^$/d
/^#.*$/d
s/^[ \t]*$key[ \t]*=[ \t]*\(.*\)[ \t]*/\/p
}" config.ini
}

run.sh

#!/bin/bash

Create(){
/usr/bin/expect -c"
set timeout
spawn ssh-keygen -t rsa
expect \":\"
send \"\r\"
expect \":\"
send \"\r\"
expect \":\"
send \"\r\"
expect eof
exit
"
} if [ ! -d .ssh ];then
Create
if [ $? != ];then
echo "step for create failed"
exit
else
cat id_rsa.pub >> .ssh/authorized_keys
if [ $? != ];then
echo "step for cp failed"
exit
fi
fi
else
cat id_rsa.pub >> .ssh/authorized_keys
if [ $? != ];then
echo "step for cp failed"
exit
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 $user@$i
expect \"password:\" {send \"$passwd\r\"}
spawn /usr/bin/scp -r id_rsa.pub $user@$i
expect \"password:\" {send \"$passwd\r\"}
expect eof
exit
"
/usr/bin/expect << EOF
set timeout
spawn ssh user@$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

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

  1. Linux shell脚本 批量创建多个用户

    Linux shell脚本 批量创建多个用户 #!/bin/bash groupadd charlesgroup for username in charles1 charles2 charles3 ...

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

    SSH原理与运用(二):远程操作与端口转发 作者:阮一峰 (Image credit: Tony Narlock) 七.远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作. 上一 ...

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

    SSH原理与运用(二):远程操作与端口转发 http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html 接着前一次的文章,继续介绍S ...

  4. Linux使用ssh公钥实现免批量分发管理服务器

    ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 管理机器外网IP10.0.0.61(内网172.16.1.61) 服务器外网1 ...

  5. Linux之间配置免秘钥访问

    环境说明 [root@localhost1 ~]# cat /etc/redhat-release CentOS release 6.5 (Final) [root@localhost1 ~]# un ...

  6. hadoop再次集群搭建(2)-配置免秘钥ssh登录

    SSH对于大多程序员都不陌生,目前主流的云服务提供上也是通过SSH来提供链接的安全保障,比如AWS通过使用下载的私钥(private key)实现与EC2实例安全连接.GitHub通过上传的公钥(pu ...

  7. SSH配置免秘钥登录

    一.  SSH 配置免秘要登录 配置SSH 免秘要登录,虽然就那么几步,但总是会出现点小问题,今天就做下记录.SSH 免秘钥就是让两台机器相互信任,不需要输入密码就能相互登录.配置相互信任就是把各自的 ...

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

    首先安装expect # yum -y install expect 命令格式 # ./expect IP COMM    #expect是独立的工具,所以不能用sh来执行 1 2 3 4 5 6 7 ...

  9. linux下ssh/sftp配置和权限设置

    基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录). 1.开通 sftp 帐号,使用户只能 sftp 操作文件, 而不能 ssh ...

随机推荐

  1. java只有值传递,不存在引用传递

    今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java的这 ...

  2. 关于Android的Build类——获取Android手机设备各种信息

    经常遇到要获取Android手机设备的相关信息,来进行业务的开发,比如经常会遇到要获取CPU的类型来进行so库的动态的下载.而这些都是在Android的Build类里面.相关信息如下: private ...

  3. osgMulitiplerendertargets sample 中fbo使用【HTC VIVE开发中应用】

    osgmultiplerendertargets.cpp ...................................... // now create the camera to do t ...

  4. [转载]Java 反射机制(包括组成、结构、示例说明等内容)

    FROM:http://www.cnblogs.com/skywang12345/p/3345205.html 第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们 ...

  5. 【招聘App】—— React/Nodejs/MongoDB全栈项目:登录注册

    前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ...

  6. SpringMVC中使用CommonsMultipartResolver进行文件上传

    概述: CommonsMultipartResolver是基于Apache的Commons FileUpload来实现文件上传功能的.所以在项目中需要相应的jar文件. FileUpload版本要求1 ...

  7. jquery.cookie.js操作cookie实现“记住密码”,很简单很强大

    //初始化页面时验证是否记住了密码 $(document).ready(function() { if ($.cookie("rmbUser") == "true&quo ...

  8. 【FAQ】Ubuntu环境下ant编译android代码问题

    在Ubuntu14.04环境下,编译android程序时候,运行ant debug的时候出现如下异常:

  9. tcp/ip--百度百科

    Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议.Inter ...

  10. Qt Creator项目中使用qss

    近期学习qt .使用的编译器是qt creator ,学习过程中遇到的题就是 怎样将程序中将要用到的.qss 文件静态编译到.exe程序中,而不是在程序执行时动态加载.动态加载的最大问题在于一旦.qs ...