Jump to content

Recommended Posts

Posted

Есть у меня скрипт для автологона на коммутаторы:

#!/usr/bin/expect

set timeout 10
set host [lindex $argv 0]
set user "user"
set pass "password"

if { $host == "" } {
    puts "Usage: swterm host\r"
    exit
}

send_tty "\033]0;$host\007"

spawn telnet $host

expect {
    -nocase
    -re "(login|name)(\(.+\))?:"
    {
        send "$user\r"
    }
}

expect {
    -nocase
    -re "(password)(\(.+\))?:"
    {
        send "$pass\r"
    }
}

expect {
    -timeout 1
    -nocase
    -re "error"
    {
        send "admin\r"
        send "admin\r"
    }
}

expect {
    -timeout 1
    -nocase
    -re "error"
    {
        send "admin\r"
        send "123456\r"
    }
}

expect {
    -timeout 1
    "*\$"
    {
        send "enable\r"
    }
    "*>"
    {
        send "enable\r"
    }
}

interact

send_tty "\r"
send_tty "\033]0;\007"

Скрипт подключается с определенным паролем, если не получилось, то пробует подключиться со стандартными паролями.

Затем выполняет enable, если требуется.

Но если удалось подключиться с первого раза, то ждет пару секунд, прежде чем включает enable и дает доступ к консоли.

Можно ли обойти это ожидание, если логин успешен? Есть ли в expect что-то вроде goto?

Posted

Есть. И он даже у меня используется в одном месте.

Но if усложнит скрипт.

Идеальным было бы сделать что-то вроде goto на последний блок с except.

Posted

Ага.

В общем переписал скрипт.

Неидеально, но все же стало лучше.

#!/usr/bin/expect

set timeout 10
set host [lindex $argv 0]

if { $host == "" } {
    puts "Usage: swterm host\r"
    exit
}

send_tty "\033]0;$host\007"

spawn telnet $host

foreach {user pass} [list admin password admin admin admin 123456] {

    expect {
        -nocase
        -re "(login|name)(\(.+\))?:"
        {
            send "$user\r"
        }
    }

    expect {
        -nocase
        -re "(password)(\(.+\))?:"
        {
            send "$pass\r"
        }
    }

    expect {
        -timeout 1
        -re "(error|wrong|invalid)"
        {
            continue
        }
        timeout
        {
            continue
        }
        "*\$"
        {
            send "enable\r"
            break
        }
        "*>"
        {
            send "enable\r"
            break
        }
        -notransfer "*#"
        {
            break
        }
    }

}

expect {
    -timeout 1
    "*#"
    {
        send "terminal monitor\r"
    }
}

interact

send_tty "\r"
send_tty "\033]0;\007"

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.