免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5517 | 回复: 14
打印 上一主题 下一主题

一个expect的免密码scp脚本问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-27 09:46 |只看该作者 |倒序浏览
谢谢大家,这个问题基本上解决了,方法就是在spawn后面直接加一个绝对路径文件名,文件的内容就是find...xargs....,exit改成intersct了(不知道原理),希望能给大家些提示;
还有个问题没有解决,就是没scp一个文件,就要一个密码,我现在只能在脚本里面多写几个password,有没有什么好的解决办法啊?





路过帮忙看看这个脚本,弄了好久都不成,平台是 Turbolinux,tcl-8.3.3-10,expect-5.32-10
脚本的作用是将本机指定目录下面七天内产生的新文件scp到另一台机器上面
#!/usr/bin/expect
set timeout 300
spawn find /opt/   -maxdepth 1 -type f  -mtime -7|xargs scp \{\} 192.168.x.x:/opt/aa
expect "assword:"
send "xxxxx\r"
exit
换成这样也不行
#!/usr/bin/expect
set timeout 300
spawn find /opt/   -maxdepth 1 -type f  -mtime -7 -exec  scp /{/} 192.168.x.x:/opt/aa \;
expect "assword:"
send "xxxxx\r"
exit

[ 本帖最后由 达萨 于 2008-1-4 11:07 编辑 ]

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2007-12-27 09:55 |只看该作者
/opt/   -maxdepth 1 -type f  -mtime -7|xargs scp /{/} 192.168.x.x:/opt/aa
这一串都将以空格分割当作一个个参数传给 find

论坛徽章:
0
3 [报告]
发表于 2007-12-27 09:56 |只看该作者
先确认find这里单独执行能否成功吧

scp  `find /opt/   -maxdepth 1 -type f  -mtime -7|xargs` 192.168.x.x:/opt/aa

[ 本帖最后由 very_99 于 2007-12-27 10:00 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-12-27 10:02 |只看该作者
谢谢大家
单独运行的话下面的那个可以,上面的不行,因为上面那个是找到一个执行一个,没机会输入password
waker:你的帖子我也看了,但总感觉这个是转义的问题,还有就是我不是很清楚下面这句话
spawn find /opt/   -maxdepth 1 -type f  -mtime -7|xargs scp /{/} 192.168.x.x:/opt/aa
在expect里面和在bash里面有什么不同,有没有把find的结果放在一个变量里面,然后scp去使用这个变量

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2007-12-27 10:10 |只看该作者

  1. spawn echo /opt/   -maxdepth 1 -type f  -mtime -7|xargs scp /{/} 192.168.x.x:/opt/aa
  2. expect -re {.*\r}
  3. puts $expect_out(buffer)
复制代码

不知道这段代码能否让你明白二楼的回复

论坛徽章:
0
6 [报告]
发表于 2007-12-27 10:16 |只看该作者
看得开始迷糊..........

论坛徽章:
0
7 [报告]
发表于 2007-12-27 10:46 |只看该作者
应该是把整条查找拷贝命令放进了buffer里面,这样语句就是完整的,我上面直接写的会以流的方式传给find,会得到不正确的结果,但是怎么把buffer里面的拿出来执行我还是不会,正在学习expect的帖子,没有脚本现在就是靠手动拷贝,所以无论如何这个也要搞明白,本版的很多帖子我都浏览过,感觉孩子他爹是难得一见的版主,但愿不要被我们这些人把你的耐心折腾没了。我是做oracle管理工作的,对shell了解不深。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
8 [报告]
发表于 2007-12-27 11:11 |只看该作者
换个思路,写expect脚本 myscp.exp 它接受参数,然后 scp  参数 192.168.x.x:/opt/aa


find ...|xargs myscp.exp如何?

论坛徽章:
0
9 [报告]
发表于 2007-12-27 11:11 |只看该作者
spawn echo /opt/   -maxdepth 1 -type f  -mtime -7|xargs scp \{\} 192.168.x.x:/opt/aa
expect -re {.*\r}
puts $expect_out(buffer)
find buffer(不行)
find $expect_out (也不行)
我知道这是个简单的从buffer取值的操作,但是具体怎么写呢?

论坛徽章:
0
10 [报告]
发表于 2007-12-27 11:41 |只看该作者
有什么办法能把执行find的结果放在下面这句话的‘参数 ’里面
scp  参数 192.168.x.x:/opt/aa
还有这句find ...|xargs myscp.exp,  myscp.exp的内容应该是
scp  参数 192.168.x.x:/opt/aa
这个里面的‘参数’怎么写呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP