2019独角兽企业重金招聘Python工程师标准>>>

目的:我们机器的的ID密码都是各不相同的,不是统一ID和密码增加了脚本的难度,只能把服务器的ID密码ip相关信息写到一个文件中,用sed cut awk去取值,用expect调用这些值达到免密码的功能

这个是最终想要的结果,终于成功了,花了我几天的时间研究,真的不容易。

1,开始还是坚持用的for去写循环,发现shell参数好像传不到expect里面去,一直纠结怎么传参,百度了好久,spawn那里一直报错,我还查了spawn的语法格式,综合百度尝试了很多还是报错。

2,我单独把那个变量写在其他脚本里,看是否能echo出来,发现用的for出问题了,果断换成了while.于是脚本就被改成了以下形式

3,最后还是用for写出来了,主要是变量的值需要仔细测试是否成功

方法1 while-expect

[root@R1 shell]# cat ExCopy.sh
#!/bin/bash
while read LINES
do
        file=test.txt
        ID=`echo $LINES |cut -d : -f2`
        host=`echo $LINES |cut -d : -f1`
        passwd=`echo $LINES |cut -d : -f3`
        expect <<EOF
                spawn scp -r $file  $ID@$host:/tmp
        expect "yes/no"  {send "yes\n"}
        expect "password" {send "$passwd\n"}
        expect eof
EOF
done <list

运行结果:

[root@R1 shell]# ./ExCopy.sh
spawn scp -r test.txt lei@192.168.1.105:/tmp
The authenticity of host '192.168.1.105 (192.168.1.105)' can't be established.
RSA key fingerprint is 4d:74:55:fb:1b:5a:f4:d2:a6:fc:33:49:c4:e5:6f:09.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.105' (RSA) to the list of known hosts.
lei@192.168.1.105's password:
test.txt                                      100% 1702     1.7KB/s   00:00
spawn scp -r test.txt ray@192.168.1.106:/tmp
ray@192.168.1.106's password:
test.txt                                      100% 1702     1.7KB/s   00:00

文件已经在客户机上传送完毕

————————————————————————————

方法2 for-expect

还是想用for写出来,

思路:利用sed读取第一行,第一行可以设置变量,对第一行进行cut第几列的数据,做到可以精确的取出想要的值,接下来就是和expect语句了没多少变化

[root@R1 shell]# cat for.sh
#!/bin/bash
num=1
for i in `cat list`
do
        file=passwd
        ID=`sed -n "$num p" list | cut -d : -f2`
        host=`sed -n "$num p" list | cut -d : -f1 `
        passwd=`sed -n "$num p" list | cut -d : -f3 `
        let num+=1
expect <<EOF
         spawn scp -r $file  $ID@$host:/tmp
        expect "password" {send "$passwd\n"}
        expect eof
EOF
done

转载于:https://my.oschina.net/u/3713661/blog/1602587

while/for 嵌套expect 批量免密码传文件相关推荐

  1. 服务器免密码传输文件,CentOS7,使用 scp 命令, ssh 连接方式,免密码传输文件到远程服务器,免密执行远程服务器上的 shell 脚本...

    如题 如果提示:-bash: scp: command not found, 执行下面的命令安装:1 yum install -y openssh-clients 免密码配置通常用 scp 命令通过 ...

  2. shell脚本ssh登录并执行命令_Linux批量免密码SSH登录案例

    一.为什么要免密码登录Linux系统 1.日常使用更方便(不是主要原因) 2.通过ansible等自动化运维工具,批量管理多台服务器,那么控制节点需要免密登录各个被控主机. 2.云环境中实现自动化扩展 ...

  3. Linux scp 免密码 传输文件

    SCP的使用 背景介绍 最近项目是集群化部署(由 node1,node2,node3 三台 CentOS 7.4 的虚拟机构成). 但是,涉及到跨机器同步文件的问题,想通过写shell文件实现,用 c ...

  4. windows登录linux免密码,Windows使用SSH Secure Shell实现免密码登录Linux的方法以及使用scp2命令免密码下载文件...

    1.   环境信息 SSH Secure Shell Client所在的操作系统: Windows7 Linux服务器以及SSH的版本: [hadoop@gpmaster ~]$ cat /etc/r ...

  5. scp免密码传送文件

    一.单向 ssh-keygen -t rsa 单向无密码访问远程服务器操作比较简单,比如服务器A需要无密码访问服务器B(A–>B),那么只需要在服务器A生成密钥对,将生成的公钥上传到服务器B的相 ...

  6. Windows使用SSH Secure Shell实现免密码登录Linux的方法以及使用scp2命令免密码下载文件

    1.   环境信息 SSH Secure Shell Client所在的操作系统: Windows7 Linux服务器以及SSH的版本: [hadoop@gpmaster ~]$ cat /etc/r ...

  7. ssh scp 从windows免密码下载文件到linux

    在linux主机(ssh客户端),通过ssh-keygen在建立SSH keys # ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码) 将在linux主机的当 ...

  8. usr/bin/expect方式免密码登录和发送文件脚本

    2019独角兽企业重金招聘Python工程师标准>>> ssh 登录 #!/usr/bin/expect set timeout 20 if { [llength $argv] &l ...

  9. Linux之间ssh免密码登录

    为什么80%的码农都做不了架构师?>>>    一.生成公私钥对 $ ssh-keygen -t rsa -P '' Generating public/private rsa ke ...

最新文章

  1. DEV—【GridControl添加按钮列】
  2. Android大图片裁剪终极解决方案 原理分析
  3. 计算机知识探索怎么写,计算机基础知识及探索.doc
  4. 苹果 AirPods 固件更新,这个新功能上线!
  5. 移动端点击出现阴影 css解决方案
  6. 冈萨雷斯图像处理Matlab函数汇总
  7. 制作单机俄罗斯游戏心得(三)
  8. 关于GetTickCount函数的用法
  9. 淘宝店铺基础版全屏店招和背景解决方法
  10. Hyperf JSON RPC 服务 Demo
  11. 深蓝词库转换2.2发布,支持手心输入法和Win10微软拼音
  12. win10 远程桌面卡顿_主编教你win10系统使用远程桌面卡顿的步骤
  13. 团队开发如何评估工作量
  14. pdf文件在线预览,兼容多浏览器和手机端
  15. 全局下的isFinite
  16. 【小强推歌】---Shania Twain 经典歌曲收藏
  17. 广州市长温国辉:用“加减乘除法”发展民营经济
  18. java内网推送app,java – 使用来自app-engine的Parse发送推送通...
  19. ascii码中的A的代码是什么?
  20. java实现概率抽奖

热门文章

  1. react-事件相关
  2. 【Vue】v-bind v-model指令的使用(实现计算器效果)
  3. [C++]实现委托模型
  4. 排序数字英文字母交错,由小到大
  5. TS Interface
  6. php操作MySQL数据库的方法和解析
  7. Java刺客信条回复生命,刺客信条英灵殿怎么回血 生命值恢复方法介绍
  8. 只读数据文件损坏恢复
  9. linux下sock_raw和sock_stream读取缓存的区别
  10. 「Algospot」津巴布韦ZIMBABWE