免费注册 查看新帖 |

Chinaunix

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

[已解决]用expect远程自动登陆后如何执行远程命令? [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-01 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-25 16:05 |只看该作者 |倒序浏览
请教大家一下,我的linux使用expect编写了一个ssh自动登陆并执行远程命令的脚本,
登陆正常,但执行的命令发送到了本地,如何才能修改成执行远程的命令?

以下是脚本,手动进入expect单步执行功能都没有问题,再远程生成了文件,
但保存成脚本后执行会在本地生成文件,是语法有问题吗?大家帮忙看一下:

  1. #!/usr/bin/expect
  2. spawn ssh hosta
  3. expect "password: "
  4. send "root\r"
  5. spawn sh
  6. send "ls > /tmp/ls.log\r"
  7. expect eof
  8. exit
复制代码

[ 本帖最后由 youke 于 2008-9-27 15:13 编辑 ]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-01 06:20:00
2 [报告]
发表于 2008-09-26 14:17 |只看该作者
大家帮忙看看,我试了一下rsh,也是单步可以成功执行远程命令,放在脚本里就只在本地执行了,不知道为什么……

论坛徽章:
0
3 [报告]
发表于 2008-09-26 14:32 |只看该作者
去掉spawn sh

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-01 06:20:00
4 [报告]
发表于 2008-09-26 22:48 |只看该作者
还是不行呀,哪位大虾给点主意呀

论坛徽章:
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 [报告]
发表于 2008-09-27 09:26 |只看该作者
#!/usr/bin/expect
spawn ssh hosta
expect "password: "
send "root\r"
send "ls > /tmp/ls.log\r"
interact

看看置顶文章吧

论坛徽章:
0
6 [报告]
发表于 2008-09-27 09:59 |只看该作者

回复 #4 youke 的帖子

怎么不行,具体如何?

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-01 06:20:00
7 [报告]
发表于 2008-09-27 12:39 |只看该作者

回复 #5 waker 的帖子

给个链接,好吗,谢了!!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-01 06:20:00
8 [报告]
发表于 2008-09-27 12:43 |只看该作者

回复 #6 无声无息 的帖子

还是会在本地执行呀,能给写个正确的例子吗,谢了!!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-01 06:20:00
9 [报告]
发表于 2008-09-27 15:13 |只看该作者
好了 原本的脚本应该没什么大问题,都是看文档写来的,
出问题的原因怀疑是由于执行不同步,命令写在脚本里时顺序执行,但是可能登陆命令还没执行完就执行了后续的命令,导致在本地生成了文件。
在关键命令后增加个sleep 1解决了这个问题 正确生成并返回了状态
谢谢大家

  1. #!/usr/bin/expect
  2. spawn ssh hosta
  3. sleep 1
  4. expect "password: "
  5. sleep 1
  6. send "welcome\r"
  7. sleep 1
  8. send "ls >/tmp/l3.log\r"
  9. send "echo status:$?\r"
  10. sleep 1
  11. expect -re "status:(\[0-9]+)" { exit $expect_out(1,string) }
  12. sleep 1
  13. exit
复制代码


另外加了interact后如何自动退出呢?从现在的测试来看interact以后的命令都没有执行。

[ 本帖最后由 youke 于 2008-9-27 15:15 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP