免费注册 查看新帖 |

Chinaunix

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

expect 如何根据不同的提示符发送不同的回答字符? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-12 17:37 |只看该作者 |倒序浏览
如下语句是我的EXPECT一个脚本,


  1. spawn ssh a.b.c.d   -1
  2. sleep 10
  3. expect "no)?"
  4. send "yes\r"
  5. expect "assword:"
  6. send "abc\r"
  7. interact
复制代码


脚本在A机上运行,B机的IP是:a.b.c.d
如果A机从没有SSH到B机过,则提示:“Are you sure you want to continue connecting (yes/no)?"
我要回答:yes
然后提示:password:


如果A机以前有SSH到B机,则直接提示:password:

我脚本理想的实现是:

有‘Are you sure you want to continue connecting (yes/no)?"’ 提示,我就回应:yes,
然后回应密码登录。


没有这个提示,就直接回应密码,


以上脚本要如何改进一下,适应于所有的环境?不管A有不有SSH过B机器,A机都能自动登录SSH到B机上?

[ 本帖最后由 afdlove 于 2007-12-12 17:59 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-12-13 11:11 |只看该作者
顶一下,等。。。

论坛徽章:
0
3 [报告]
发表于 2007-12-13 11:15 |只看该作者
看下我的

#!/usr/bin/expect -f
set USER [lindex $argv 0]
set HOST [lindex $argv 1]
set PASSWD [lindex $argv 2]
spawn ssh -l $USER $HOST
set timeout 60
while {1} {
    expect -re "Are you sure you want to continue connecting (yes/no)?" {
            # First connect, no public key in ~/.ssh/known_hosts
            send "yes\r"
        } -re "assword:" {
            # Already has public key in ~/.ssh/known_hosts
            send "$PASSWD\r"
        } -re "Permission denied, please try again." {
            # Password not correct
            exit 1
        } -re "Connection refused" {
            exit 1
        } timeout {
            exit 1
        } "#" {
            interact
        } "losed" {
            exit 1
        }
}

论坛徽章:
0
4 [报告]
发表于 2007-12-13 11:21 |只看该作者
BLZer ,你的大作我昨天在网上找到试了下,
我把while那段直接COPY了的。。。

不能用。。

我的A机是AS4   2.6.9,B机是RH9,2。6。8,不知道环境是不是不同?

[ 本帖最后由 afdlove 于 2007-12-13 11:23 编辑 ]

论坛徽章:
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-13 11:24 |只看该作者
expect_before "no)?" {
send "yes\r" }
sleep .1
expect "assword:"
send "abc\r"

论坛徽章:
0
6 [报告]
发表于 2007-12-13 11:29 |只看该作者
waker老大:如下脚本可以了。

more alxx.sh
#!/usr/bin/expect
spawn ssh a.b.c.d   -p 60022 -1
sleep 6
expect_before "no)?" {
send "yes\r" }
sleep .1
expect "assword:"
send "abc\r"
interact

我再测试一下。

[ 本帖最后由 afdlove 于 2007-12-13 11:33 编辑 ]

论坛徽章:
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
7 [报告]
发表于 2007-12-13 11:32 |只看该作者
expect "assword: "
sleep .1
send............

send的太快有时也会出问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP