需要目标机器安装有 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

  1. #!/bin/bash
  2.  
  3. GetKey(){
  4. section=$(echo $ |cut -d '.' -f )
  5. key=$(echo $ |cut -d '.' -f )
  6. if [ "$section"x = "ip"x ];then
  7. nub=`cat config.ini | grep -n "$key={" |awk -F ":" '{print $1}'`
  8. nue=`cat config.ini | grep -n "}" |awk -F ":" '{print $1}'`
  9. nub=`expr $nub +`
  10. for i in $nue
  11. do
  12. if [ $i -gt $nub ]; then
  13. a=$i
  14. break
  15. fi
  16. done
  17. nue=`expr $a -`
  18. sed -n "$nub,$nue p" config |sed s/,//g
  19. else
  20. sed -n "/\[$section\]/,/\[.*\]/{
  21. /^\[.*\]/d
  22. /^[ \t]*$/d
  23. /^$/d
  24. /^#.*$/d
  25. s/^[ \t]*$key[ \t]*=[ \t]*\(.*\)[ \t]*/\/p
  26. }" config.ini
  27. }

run.sh

  1. #!/bin/bash
  2.  
  3. Create(){
  4. /usr/bin/expect -c"
  5. set timeout
  6. spawn ssh-keygen -t rsa
  7. expect \":\"
  8. send \"\r\"
  9. expect \":\"
  10. send \"\r\"
  11. expect \":\"
  12. send \"\r\"
  13. expect eof
  14. exit
  15. "
  16. }
  17.  
  18. if [ ! -d .ssh ];then
  19. Create
  20. if [ $? != ];then
  21. echo "step for create failed"
  22. exit
  23. else
  24. cat id_rsa.pub >> .ssh/authorized_keys
  25. if [ $? != ];then
  26. echo "step for cp failed"
  27. exit
  28. fi
  29. fi
  30. else
  31. cat id_rsa.pub >> .ssh/authorized_keys
  32. if [ $? != ];then
  33. echo "step for cp failed"
  34. exit
  35. fi
  36. fi

test.sh

  1. #!/bin/bash
  2. . ./read.sh
  3.  
  4. ip=$(GetKey "ip.ip")
  5. passwd=$(GetKey "pass.passwd")
  6. user=$(GetKey "user.usr")
  7.  
  8. for i in $ip
  9. do
  10. /usr/bin/expect -c"
  11. set timeout10
  12. spawn /usr/bin/scp -r run.sh $user@$i
  13. expect \"password:\" {send \"$passwd\r\"}
  14. spawn /usr/bin/scp -r id_rsa.pub $user@$i
  15. expect \"password:\" {send \"$passwd\r\"}
  16. expect eof
  17. exit
  18. "
  19. /usr/bin/expect << EOF
  20. set timeout
  21. spawn ssh user@$i
  22. expect "password:"
  23. send "$passwd\r"
  24. expect "]"
  25. send "sh run.sh\r"
  26. send "exit\r"
  27. expect eof
  28. EOF
  29. done

配置文件

  1. [ip]
  2. ip={
  3. 12.23.31.114
  4. ,21.34.54.112
  5. }
  6.  
  7. [user]
  8. usr=hehehe
  9.  
  10. [pass]
  11. 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. ODATA4 及实现

    ODATA4 的JAVASCRIPT 实现:     http://jaydata.org/ ODATA4 的JAVA 项目  Apache Olingo:http://olingo.incubato ...

  2. canvas如何兼容IE8

    大家都知道canvas是个非常好玩的东西,但是IE9以下的浏览器不支持,有时候业务需求必须用到canvas,且又要求兼容IE8浏览器,那怎么办呢? 1.添加对html5的支持:<!--[if I ...

  3. 常用vim命令合集

    移动命令: h:左移 l:右移 k:上移 j:下移 ^:移动到本行第一个非空白字符上 0:移动到本行第一个字符上 gg:移动到文件头 G = shift + g:移动到文件尾 %:从一个"{ ...

  4. http://www.cnblogs.com/monian/p/3822980.html

    http://www.cnblogs.com/monian/p/3822980.html

  5. 我的mac OSX bash_profile文件

    A typical install of OS X won't create a .bash_profile for you. When you want to run functions from ...

  6. riched32.dll riched20.dll msftedit.dll 解析

    摘要: 本文对Rich Edit控件底层消息机制进行了讲解,以期读者对Windows平台下的Rich Edit控件有一个更深入的认识,同时对于使用Win32 SDK进行开发的人员具有一定参考价值.因为 ...

  7. maven命令解释

    打包:mvn package编译:mvn compile编译测试程序:mvn test-compile清空:mvn clean运行测试:mvn test生成站点目录: mvn site生成站点目录并发 ...

  8. Servlet——简单用户登录实例+http协议解析

    编写项目.用户登录系统1.0版本号 登录界面Servlet: package com.gavin.view; import java.io.IOException; import java.io.Pr ...

  9. leetcode 二分查找 Search in Rotated Sorted Array

    Search in Rotated Sorted Array Total Accepted: 28132 Total Submissions: 98526My Submissions Suppose ...

  10. python abstractmethod 对象比较

    from functools import total_ordering from abc import ABCMeta,abstractmethod @total_ordering class Sh ...