V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
F32
V2EX  ›  程序员

如何使用 Expect 进行登录,执行命令,然后退出并获取整个输出

  •  
  •   F32 · 2016-03-23 18:30:30 +08:00 · 3992 次点击
    这是一个创建于 3196 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想实现下面的效果

    ssh [email protected] (密码 admin) 登录后,运行 ls ,然后输入 exit 退出 最后把 ssh 的整个输出取出来

    #!/usr/bin/expect -f  
    
    set timeout 10
    spawn ssh [email protected]
    expect {
        "*yes/no" {
            send "yes\n";
            exp_continue
        }
        "*password:" {
            send "admin\n"
        }
        "# " {
            puts $expect_out(buffer)
            send "exit\n"
            expect eof
        }
    }
    

    但是上面的代码好像有点问题,没法实现我想要的效果,请问这个应该怎么写?

    3 条回复    2016-03-24 14:35:34 +08:00
    SpicyCat
        1
    SpicyCat  
       2016-03-23 18:54:08 +08:00   ❤️ 1
    ssh [email protected] 'ls'

    这样不行么?
    F32
        2
    F32  
    OP
       2016-03-23 19:15:10 +08:00
    @SpicyCat 发现好像可以的,目前可以解决我的问题。不过交互式模式有时也是需要的,这种情况下有获取输出的方法吗?
    truehyp
        3
    truehyp  
       2016-03-24 14:35:34 +08:00
    最近东拼西凑出来的一个脚本,还没改完,可以批量操作,所有操作记录都在 log 文件里。打算再改改,用 scp 将所有输出取回本机。
    ________________
    #!/bin/sh

    cmdfile=cmd.txt
    ipfile=ip.txt


    #run expect function
    function run()
    {
    expect <<-END
    set timeout 30
    set f [open $cmdfile r]
    spawn ssh -l $2 $1
    expect {
    "yes/no)*" {send "yes\r";exp_continue}
    "*?assword:*" {send "$3\r";exp_continue}
    "]#*" {while {[gets \$f line] >= 0} {send "\$line\r"}}
    }
    send "exit\r"
    expect eof

    spawn scp $1:~/log.txt ./
    expect {
    "yes/no)*" {send "yes\r";exp_continue}
    "*?assword:*" {send "$3\r";exp_continue}
    }

    END
    return;
    }


    for i in `cat $ipfile`
    do
    ip=`echo $i | awk -F "|" '{print $1}'`
    user=`echo $i | awk -F "|" '{print $2}'`
    passwd=`echo $i| awk -F "|" '{print $3}'`

    date >> log;
    run $ip $user $passwd >> log;
    done
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5256 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:48 · PVG 11:48 · LAX 19:48 · JFK 22:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.