SecureCRT - скрипт Python, автоматическая вкладка ssh2 не отвечает на отправляемые команды - PullRequest
0 голосов
/ 07 мая 2019

Я изменяю скрипт на python для запуска в securecrt 8.5.2, чтобы сделать резервную копию рабочей конфигурации некоторого оборудования cisco ASR9K, которое у меня есть, но сценарий внезапно завершается после второго успешного ssh2-прыжка ( 2-я вкладка) и не отправляет команды, которые я написал (выход в этом конкретном примере), вот код, который у меня есть, так как я сказал, что это измененная версия страницы в vandyke для открытия ssh2.

Одна важная вещь заключается в том, что я должен вкладывать каждую сессию каждого отдельного маршрутизатора, потому что он не позволяет делать ssh напрямую из активного cli , поэтому мне пришлось импровизировать и реализовать это "соединение" в TAB ", я подозреваю, что secureCRT не знает, находится ли он в новой вкладке, которую я открыл, поэтому он не знает, куда отправлять команды.

Я играл с линией 30, но, похоже, это никак не сказалось. Я изменял ожидаемый текст, но он не распознает правильную вкладку или не читает правильную.

Личная информация: полный новичок в языке Python.

# $language = "python"
# $interface = "1.0"

# Connect to an SSH server using the SSH2 protocol. Specify the
# username and password and hostname on the command line as well as
# some SSH2 protocol specific options.

host = "X.X.X.a"
host2 = "X.X.X.b"

def main():
    crt.Screen.Synchronous = True
    # Prompt for a username and password instead of embedding it in a script...
    #
    usr = crt.Dialog.Prompt("Enter the user name for" + host, "Username", "", True)
    passwd = crt.Dialog.Prompt("Enter TACACS+ for" + host, "Login", "", True)

    # Build a command-line string to pass to the Connect method.
    cmd = "/SSH2 /L %s /PASSWORD %s /C AES-128-CTR /M SHA1 %s" % (usr, passwd, host)
    crt.Session.Connect(cmd)
    crt.Screen.WaitForString("X.X.X.a#")
    crt.Screen.Send("copy running-config tftp:\r")
    crt.Screen.WaitForString("Host name or IP address (control-c to abort): []?")
    crt.Screen.Send("tftpserver.com\r") 
    crt.Screen.WaitForString("Destination file name (control-c to abort): [running-config]?")
    crt.Screen.Send("X.X.X.a_running_config\r")
    crt.Screen.WaitForString("X.X.X.a")
    cmd2 = "/SSH2 /L %s /PASSWORD %s /C AES-128 /M SHA1 %s" % (usr, passwd, host2)
    crt.Session.ConnectInTab(cmd2)
    crt.Screen.WaitForString("X.X.X.b#")
    crt.Screen.Send("exit\r")


main()

crt.Session.ConnectInTab (cmd2)

Он подключается к оборудованию в новой вкладке, но я ожидаю, что скрипт продолжит делать то же, что и для host1 (XXXa), и отправит те же скучные вещи на host2 (XXXb) через вкладку ssh2, и продолжайте этот процесс до тех пор, пока я не сделаю это для всего необходимого оборудования.

Спасибо, что читаете меня.

1 Ответ

0 голосов
/ 10 мая 2019

Ну, это даже не смешно - решить этот очень неоптимальный код или сценарий, но это не было большой проблемой, единственное, что мне пришлось отключиться от предыдущего сеанса, когда я залил все команды, поэтомучтобы поместить курсор на новую вкладку, предыдущий сеанс должен быть сначала отключен.

Решение?

crt.Session.Disconnect ()

...