while/for 嵌套expect 批量免密码传文件
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 批量免密码传文件相关推荐
- 服务器免密码传输文件,CentOS7,使用 scp 命令, ssh 连接方式,免密码传输文件到远程服务器,免密执行远程服务器上的 shell 脚本...
如题 如果提示:-bash: scp: command not found, 执行下面的命令安装:1 yum install -y openssh-clients 免密码配置通常用 scp 命令通过 ...
- shell脚本ssh登录并执行命令_Linux批量免密码SSH登录案例
一.为什么要免密码登录Linux系统 1.日常使用更方便(不是主要原因) 2.通过ansible等自动化运维工具,批量管理多台服务器,那么控制节点需要免密登录各个被控主机. 2.云环境中实现自动化扩展 ...
- Linux scp 免密码 传输文件
SCP的使用 背景介绍 最近项目是集群化部署(由 node1,node2,node3 三台 CentOS 7.4 的虚拟机构成). 但是,涉及到跨机器同步文件的问题,想通过写shell文件实现,用 c ...
- windows登录linux免密码,Windows使用SSH Secure Shell实现免密码登录Linux的方法以及使用scp2命令免密码下载文件...
1. 环境信息 SSH Secure Shell Client所在的操作系统: Windows7 Linux服务器以及SSH的版本: [hadoop@gpmaster ~]$ cat /etc/r ...
- scp免密码传送文件
一.单向 ssh-keygen -t rsa 单向无密码访问远程服务器操作比较简单,比如服务器A需要无密码访问服务器B(A–>B),那么只需要在服务器A生成密钥对,将生成的公钥上传到服务器B的相 ...
- Windows使用SSH Secure Shell实现免密码登录Linux的方法以及使用scp2命令免密码下载文件
1. 环境信息 SSH Secure Shell Client所在的操作系统: Windows7 Linux服务器以及SSH的版本: [hadoop@gpmaster ~]$ cat /etc/r ...
- ssh scp 从windows免密码下载文件到linux
在linux主机(ssh客户端),通过ssh-keygen在建立SSH keys # ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码) 将在linux主机的当 ...
- usr/bin/expect方式免密码登录和发送文件脚本
2019独角兽企业重金招聘Python工程师标准>>> ssh 登录 #!/usr/bin/expect set timeout 20 if { [llength $argv] &l ...
- Linux之间ssh免密码登录
为什么80%的码农都做不了架构师?>>> 一.生成公私钥对 $ ssh-keygen -t rsa -P '' Generating public/private rsa ke ...
最新文章
- DEV—【GridControl添加按钮列】
- Android大图片裁剪终极解决方案 原理分析
- 计算机知识探索怎么写,计算机基础知识及探索.doc
- 苹果 AirPods 固件更新,这个新功能上线!
- 移动端点击出现阴影 css解决方案
- 冈萨雷斯图像处理Matlab函数汇总
- 制作单机俄罗斯游戏心得(三)
- 关于GetTickCount函数的用法
- 淘宝店铺基础版全屏店招和背景解决方法
- Hyperf JSON RPC 服务 Demo
- 深蓝词库转换2.2发布,支持手心输入法和Win10微软拼音
- win10 远程桌面卡顿_主编教你win10系统使用远程桌面卡顿的步骤
- 团队开发如何评估工作量
- pdf文件在线预览,兼容多浏览器和手机端
- 全局下的isFinite
- 【小强推歌】---Shania Twain 经典歌曲收藏
- 广州市长温国辉:用“加减乘除法”发展民营经济
- java内网推送app,java – 使用来自app-engine的Parse发送推送通...
- ascii码中的A的代码是什么?
- java实现概率抽奖