Аўтаматызацыя ўводу ў SecureCRT з дапамогай скрыптоў

У сеткавых інжынераў часта ўзнікае задача, выканаць copy/past вызначаных фрагментаў з нататніка ў кансоль. Капіяваць прыходзіцца звычайна некалькі параметраў: Username/Password і штосьці яшчэ. Паскорыць гэты працэс дазваляе выкарыстанне скрыптоў. А задачы напісанне скрыпту і выкананне скрыпту сумарна павінны заняць менш чакай, чым налада ўручную, інакш скрыпты бескарысныя.

Для чаго патрэбны гэты артыкул. Гэты артыкул з цыклу Fast Start і накіравана на эканомію часу сеткавым інжынерам, пры наладзе абсталявання (адной задачы) на некалькіх прыладах. Выкарыстоўваецца ПА SecureCRT і ўбудаваны функцыянал выкананне скрыптоў.

Змест

Увядзенне

У праграму SecureCRT са скрынкі ўбудаваны механізм выканання скрыптоў. Для чаго патрэбныя скрыпты ў тэрмінале:

  • Аўтаматызаваны ўвод і выснова, і мінімальная праверка карэктнасці ўводу/высновы.
  • Паскорыць выкананне руцінных задач - памяншэнне паўзаў паміж наладай абсталявання. (Дэ факта памяншэнне паўзаў, выкліканых часам для выканання дзеянняў па copy/past на адным і тым жа абсталяванні, пры 3-х і больш фрагментаў каманд для ўжывання на абсталяванні.)

У дадзеным дакуменце разгледжаны задачы:

  • Стварэнне найпростых скрыптоў.
  • Запуск скрыптоў на SecureCRT.
  • Прыклады выкарыстання простых і прасунутых скрыптоў. (Практыка з рэальнага жыцця.)

Стварэнне найпростых скрыптоў.

Найпростыя скрыпты выкарыстоўваюць усяго дзве каманды Send і WaitForString. Гэтага функцыяналу хопіць на 90% (і больш) выкананых задач.

Скрыпты могуць працаваць на мове Python, JS, VBS (Visual Basic), Perl і т.д.

Пітон

# $language = "Python"
# $interface = "1.0"
def main():
  crt.Screen.Synchronous = True
  crt.Screen.Send("r")
  crt.Screen.WaitForString("name")
  crt.Screen.Send("adminr")
  crt.Screen.WaitForString("Password:")
  crt.Screen.Send("Password")
  crt.Screen.Synchronous = False
main()

Звычайна файл з пашырэннем "*.py"

VBS

# $language = "VBScript"
# $interface = "1.0"
Sub Main
  crt.Screen.Synchronous = True
  crt.Screen.Send vbcr
  crt.Screen.WaitForString "name"
  crt.Screen.Send "cisco" & vbcr
  crt.Screen.WaitForString "assword"
  crt.Screen.Send "cisco" & vbcr
  crt.Screen.Synchronous = False
End Sub

Звычайна файл з пашырэннем "*.vbs"

Стварэнне скрыпту з дапамогай запісу скрыпту.

Дазваляе аўтаматызаваць працэс напісання скрыпту. Вы запускаеце запіс скрыпту. SecureCRT запісвае каманды і наступны адказ абсталявання і выводзіць гатовы скрыпт.

а. Запусціць запіс скрыпту:
Меню SecureCRT => Script => Start Recording Script
б. Выканаць дзеянні з кансоллю (выканаць дзеянні па наладзе ў CLI).
в. Скончыць запіс скрыпту:
Меню SecureCRT => Script => Stop Recording Script…
Захаваць файл са скрыптам.

Прыклад выкананых каманд і захаванага скрыпту:

Аўтаматызацыя ўводу ў SecureCRT з дапамогай скрыптоў

Запуск скрыптоў на SecureCRT.

Пасля стварэння/рэдагавання скрыпту, узнікае заканамернае пытанне: Як прымяніць скрыпт?
Існуе некалькі спосабаў:

  • Запуск уручную з меню Script
  • Аўтаматычны запуск пасля падключэння (logon script)
  • Аўтаматычны logon без выкарыстання скрыпту
  • Запуск уручную з дапамогай кнопкі ў SecureCRT (кнопку яшчэ трэба будзе стварыць і дадаць у SecureCRT)

Запуск уручную з меню Script

Меню SecureCRT => Script => Run…
- Апошнія 10 скрыптоў запамінаюцца і даступныя для хуткага запуску:
Меню SecureCRT => Script => 1 "Імя файла са скрыптам"
Меню SecureCRT => Script => 2 "Імя файла са скрыптам"
Меню SecureCRT => Script => 3 "Імя файла са скрыптам"
Меню SecureCRT => Script => 4 "Імя файла са скрыптам"
Меню SecureCRT => Script => 5 "Імя файла са скрыптам"

Аўтаматычны запуск пасля падключэння (logon script)

Налады аўтаматычнага скрыпту лагавання наладжваюцца для захаванай сесіі: Connection => Logon Actions => Logon script

Аўтаматызацыя ўводу ў SecureCRT з дапамогай скрыптоў

Аўтаматычны logon без выкарыстання скрыпту

Існуе магчымасць аўтаматычнага ўводу імя карыстальніка пароля без напісання скрыпту, выкарыстоўваючы толькі ўбудаваны функцыянал SecureCRT. У наладах злучэння "Connection" => Logon Actions => Automate logon - неабходна запоўніць некалькі звязкаў - якія маюць на ўвазе сабой пары: "Чаканы тэкст" + "Пасыланыя сімвалы на гэты тэкст" такіх пар можа быць шмат. (Прыклад: 1-я пара чаканне ўводу імя карыстальніка, другая чаканне ўводу пароля, трэцяя чаканне запрашэння ў прывілеяваны рэжым, чацвёртая пароль ад прывілеяванага рэжыму.)

Прыклад аўтаматычнага logon на Cisco ASA:

Аўтаматызацыя ўводу ў SecureCRT з дапамогай скрыптоў

Запуск уручную з дапамогай кнопкі ў SecureCRT (кнопку яшчэ трэба будзе стварыць і дадаць у SecureCRT)

У SecureCRT можна задаць скрыпт - кнопцы. Кнопка дадаецца на спецыяльна створаную для гэтай мэты панэль.

а. Дадаем панэль у інтэрфейс: Меню SecureCRT => View => Button Bar
б. Дадаем кнопку на панэль і дадаем скрыпт. - Правай кнопкай мышкі пстрыкаем на панэль Button Bar і ў кантэкстным меню выбіраемы пункт "New button ...".
в. У дыялогавым акне "Map Button" у полі "Action" Выбіраемы дзеянне (function) "Run Script".
Указваем подпіс да кнопкі. Колер для абразкі кнопкі. Сканчаем налады націскам Ok.

Аўтаматызацыя ўводу ў SecureCRT з дапамогай скрыптоў

Заўвага:

Панэль з кнопкамі вельмі карысны функцыянал.

1. Ёсць магчымасць пры Logon да вызначанай сесіі паказваць якую панэль па змаўчанні адчыняць да гэтай укладкі.

2. Ёсць магчымасць для стандартных дзеянняў з абсталяваннем задаць загадзя зададзеныя дзеянні: паказаць show version, show running-config, захаваць канфігурацыю.

Аўтаматызацыя ўводу ў SecureCRT з дапамогай скрыптоў
Да дадзеных кнопак не прывязаны ні які скрыпт. Толькі радок з дзеяннямі:

Аўтаматызацыя ўводу ў SecureCRT з дапамогай скрыптоў
Настройка - каб пры пераключэнні на сесію адкрывалася неабходная панэль з кнопкамі вырабляцца ў наладах сесіі:

Аўтаматызацыя ўводу ў SecureCRT з дапамогай скрыптоў
Для заказчыка мае сэнс наладзіць індывідуальныя скрыпты для Login і пераход на панэль з частымі камандамі для вендара.

Аўтаматызацыя ўводу ў SecureCRT з дапамогай скрыптоў
Пры націску на кнопку Go Cisco - панэль перамыкаецца на Cisco Button Bar.

Аўтаматызацыя ўводу ў SecureCRT з дапамогай скрыптоў

Прыклады выкарыстання простых і прасунутых скрыптоў. (Практыка з рэальнага жыцця.)

Простых скрыптоў хапае амаль на ўсе выпадкі жыцця. Але аднойчы мне спатрэбілася крыху ўскладніць скрыпт - для паскарэння працы. Гэта ўскладненне - усяго толькі запытвала дадатковыя дадзеныя ў дыялогавым акне ў карыстальніка.

Запыт дадзеных у карыстальніка з дапамогай дыялогавага акна

У мяне ў скрыпце запытаў дадзеных было 2. Гэта Hostname і 4-ы актэт IP адрасы. Для выканання гэтага дзеяння - я загугліў як гэта зрабіць і знайшоў на афіцыйным сайце SecureCRT (vandyke). - функцыянал называецца prompt.

	crt.Screen.WaitForString("-Vlanif200]")
	hostnamestr = crt.Dialog.Prompt("Enter hostname:", "hostname", "", False)
	ipaddressstr = crt.Dialog.Prompt("Enter ip address:", "ip", "", False)
	crt.Screen.Send("ip address 10.10.10.")
	crt.Screen.Send(ipaddressstr)
	crt.Screen.Send(" 23r")
	crt.Screen.Send("quitr")
	crt.Screen.Send("sysname ")
	crt.Screen.Send(hostnamestr)
	crt.Screen.Send("r") 

Гэтая частка скрыпту запытвала Hostname і лічбы з апошняга актэта. Т. к. абсталявання было 15 шт. І дадзеныя былі прадстаўлены ў табліцы, то я капіяваў з табліцы значэння і ўстаўляў у дыялогавыя вокны. Далей скрыпт працаваў самастойна.

FTP капіраванне на сеткавае абсталяванне.

Дадзены скрыпт запускаў у мяне каманднае акно (shell) і капіяваў дадзеныя па FTP. Па завяршэнні закрываў сесію. Выкарыстоўваць нататнік для гэтага немагчыма, бо капіяванне ідзе вельмі доўга і дадзеныя ў буферы FTP не будуць гэтулькі захоўвацца:

# $language = "Python"
# $interface = "1.0"

# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.

def main():
	crt.Screen.Synchronous = True
	crt.Screen.Send("ftp 192.168.1.1r")
	crt.Screen.WaitForString("Name")
	crt.Screen.Send("adminr")
	crt.Screen.WaitForString("Password:")
	crt.Screen.Send("Passwordr")
	crt.Screen.WaitForString("ftp")
	crt.Screen.Send("binaryr")
	crt.Screen.WaitForString("ftp")
	crt.Screen.Send("put S5720LI-V200R011SPH016.patr")
	crt.Screen.WaitForString("ftp")
	crt.Screen.Send("quitr")
	crt.Screen.Synchronous = False
main()

Увод username/password з дапамогай скрыпту

У аднаго замоўца доступ да сеткавага абсталявання напроста быў зачынены. Зайсці на абсталяванне можна было спачатку падключыўшыся да Шлюза па змаўчанні, а з яго потым на абсталяванне падключанае да яго. Для падлучэння выкарыстоўваўся ssh кліент убудаваны ў IOS/ПА абсталяванні. Адпаведна імя карыстальніка і пароль запытваліся ў кансолі. З дапамогай скрыпта ніжэй, імя карыстальніка і пароль уводзіліся аўтаматычна:

# $language = "Python"
# $interface = "1.0"

# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.

def main():
	crt.Screen.Synchronous = True
	crt.Screen.Send("snmpadminr")
	crt.Screen.WaitForString("assword:")
	crt.Screen.Send("Passwordr")
	crt.Screen.Synchronous = False
main()

Заўвага: Скрыпту было 2. Адзін для ўліковага запісу адміністратара, другі для ўліковага запісу eSIGHT.

Скрыпт з магчымасцю напроста дапісваць дадзеныя падчас выканання скрыпту.

Задачай было дадаць на ўсім сеткавым абсталяванні статычны маршрут. Але шлюз у інтэрнэт на кожным абсталяванні быў свой (і ён адрозніваўся ад шлюза па змаўчанні). Наступны скрыпт выводзіў табліцу маршрутызацыі, уводзіў у рэжым канфігуравання недапісваў да канца каманду (IP адрас шлюза ў інтэрнэт) - гэтую частку дапісваў я. Пасля таго як я націскаў Enter, скрыпт працягваў выкананне каманды.

# $language = "Python"
# $interface = "1.0"

# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.

def main():
	crt.Screen.Synchronous = True
	crt.Screen.Send("Zdes-mogla-bit-vasha-reklamar")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("show run | inc ip router")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("conf tr")
	crt.Screen.WaitForString("(config)#")
	crt.Screen.Send("ip route 10.10.10.8 255.255.255.252 ")
	crt.Screen.WaitForString("(config)#")
	crt.Screen.Send("endr")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("copy run star")
	crt.Screen.WaitForString("[startup-config]?")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("exitr")
	crt.Screen.Synchronous = False
main()

У дадзеным скрыпце ў радку: crt.Screen.Send(«ip route 10.10.10.8 255.255.255.252 „) не дапісаны IP адрас шлюза і адсутнічае знак перакладу карэткі. Скрыпт чакае з'яўленні наступнага радка з знакамі «(config)#» Дадзеныя знакі з'яўляліся пасля ўводу мной ip адрасы і enter.

заключэнне:

Пры напісанні скрыпту і выкананні, павінна абавязкова выконвацца правіла: Час напісання скрыпту і выкананні скрыпту ні калі не павінна быць больш, часу тэарэтычна выдаткаванага на выкананні гэтай жа працы ўручную (copy/paste з нататніка, напісанне і адладка playbook для ansible, напісанне і адладка скрыпта python). Т. е. выкарыстанне скрыпту павінна эканоміць час, а не марнаваць час на аднаразовую аўтаматызацыю працэсаў (Т. е. калі скрыпт унікальны і паўтарэння больш не будзе). Але калі скрыпт унікальны і аўтаматызацыя са скрыптам і напісанне/адладка скрыпту займае чакай менш чым выкананне любым іншым спосабам (ansible, command window), то скрыпт - лепшае рашэнне.
Адладка скрыпту. Скрыпт расце паступова, адладка адбываецца на абкаце на першай, другой, трэцяй прыладзе і да чацвёртага скрыпт хутчэй за ўсё будзе цалкам працоўным.

Запуск скрыпту (з уводам username+password) з дапамогай мышкі звычайна адбываецца хутчэй, чым капіраванне з нататніка Username і Password. Але не бяспечна з пункту гледжання бяспекі.
Іншы (рэальны) прыклад калі выкарыстанне скрыпту: Прамога доступу на сеткавае абсталяванне ў Вас няма. Але ёсць неабходнасць даналадзіць усё сеткавае абсталяванне (завесці ў сістэму маніторынгу, даналадзіць дадатковы Username/password/snmpv3username/password). Ёсць доступ калі вы заходзіце на Core камутатар, з яго адчыняеце SSH на іншае абсталяванне. Чаму нельга выкарыстоўваць сродкі Ansible. - Таму што мы ўпіраемся ў абмежаванне па колькасці дапушчальных адначасовых сесій на сеткавым абсталяванні (line vty 0 4, user-interface vty 0 4) (іншае пытанне як у Ansible заводзіць рознае абсталяванне з адным і тым жа SSH першым хопам).

Скрыпт памяншае час пры працяглых аперацыях - напрыклад капіраванне файлаў па FTP. Пасля канчатка капіявання скрыпт адразу пачынае працаваць. Чалавеку запатрабуецца ўбачыць канчатак капіявання, потым усвядоміць канчатак капіявання, потым увесці адпаведныя каманды. Скрыпт гэта робіць аб'ектыўна хутчэй.

Скрыпты дастасавальныя там, дзе немагчыма выкарыстоўваць сродкі масавай дастаўкі дадзеных: Кансоль. Або калі частка дадзеных для абсталявання ўнікальная: hostname, management ip address. Або калі пісаць праграму і адладку да яе складаней, чым дапісаць дадзеныя атрыманыя з абсталявання падчас працы скрыпту. - Прыклад са скрыптам па прапісванні маршруту, калі на кожным абсталяванне IP адрас інтэрнэт правайдэра свой. (Мае калегі пісалі такія скрыпты - калі DMVPN spoke было за 3 сотні. Неабходна было змяніць налады DMVPN).

Прыклад з практыкі: Заданне першапачатковых налад на новым камутатары праз кансольныя парты:

А. Уставіў кансольны кабель у прыладу.
Б. Запусціў скрыпт
В. Дачакаўся выканання скрыпту
Г. Ператкнуў кансольны кабель у наступную прыладу.
Д. Калі світч не апошні, перайсці да пункта Б.

Разам па выніках працы скрыпту:

  • на абсталяванні зададзены пачатковы пароль.
  • уведзены Username
  • уведзены ўнікальны IP адрас прылады.

PS аперацыю прыйшлося паўтараць. Т. к. па Default ssh апынуўся не наладжаны/выключаны. (Ды гэта мая памылка.)

Выкарыстаныя крыніцы.

1. Аб стварэнні скрыптоў
2. Прыклады скрыптоў

Прыкладанне 1: Прыклады скрыптоў.


Прыклад доўгага скрыпту, з двума запытамі: Hostname і IP адрасам. Ствараўся для перадналадкі абсталявання праз кансоль (9600 бод). А таксама для падрыхтоўкі падключэння абсталявання да сеткі.

# $language = "Python"
# $interface = "1.0"

# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.

def main():
	crt.Screen.Synchronous = True
	crt.Screen.Send("r")
	crt.Screen.WaitForString("name")
	crt.Screen.Send("adminr")
	crt.Screen.WaitForString("Password:")
	crt.Screen.Send("Passwordr")
	crt.Screen.Send("sysr")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("interface Vlanif 1r")
	crt.Screen.WaitForString("Vlanif1]")
	crt.Screen.Send("undo ip addressr")
	crt.Screen.Send("shutdownr")
	crt.Screen.Send("vlan 100r")
	crt.Screen.Send(" description description1r")
	crt.Screen.Send(" name description1r")
	crt.Screen.Send("vlan 110r")
	crt.Screen.Send(" description description2r")
	crt.Screen.Send(" name description2r")
	crt.Screen.Send("vlan 120r")
	crt.Screen.Send(" description description3r")
	crt.Screen.Send(" name description3r")
	crt.Screen.Send("vlan 130r")
	crt.Screen.Send(" description description4r")
	crt.Screen.Send(" name description4r")
	crt.Screen.Send("vlan 140r")
	crt.Screen.Send(" description description5r")
	crt.Screen.Send(" name description5r")
	crt.Screen.Send("vlan 150r")
	crt.Screen.Send(" description description6r")
	crt.Screen.Send(" name description6r")
	crt.Screen.Send("vlan 160r")
	crt.Screen.Send(" description description7r")
	crt.Screen.Send(" name description7r")
	crt.Screen.Send("vlan 170r")
	crt.Screen.Send(" description description8r")
	crt.Screen.Send(" name description8r")               
	crt.Screen.Send("vlan 180r")
	crt.Screen.Send(" description description9r")
	crt.Screen.Send(" name description9r")
	crt.Screen.Send("vlan 200r")
	crt.Screen.Send(" description description10r")
	crt.Screen.Send(" name description10r")
	crt.Screen.Send("vlan 300r")
	crt.Screen.Send(" description description11r")
	crt.Screen.Send(" name description11r")
	crt.Screen.Send("quitr")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("stp region-configurationr")
	crt.Screen.Send("region-name descr")
	crt.Screen.Send("active region-configurationr")
	crt.Screen.WaitForString("mst-region]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("stp instance 0 priority 57344r")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/42r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description Usersr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type hybridr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("voice-vlan 100 enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("voice-vlan legacy enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid pvid vlan 120r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid tagged vlan 100r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid untagged vlan 120r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("stp edged-port enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("trust 8021pr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action blockr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trapr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("interface range GigabitEthernet 0/0/43 to GigabitEthernet 0/0/48r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description Printersr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type accessr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port default vlan 130r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("stp edged-port enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("trust 8021pr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action blockr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trapr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("interface range XGigabitEthernet 0/0/1 to XGigabitEthernet 0/0/2r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description uplinkr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type trunkr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port trunk allow-pass vlan 100 110 120 130 140 150 160 170 180 200r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port trunk allow-pass vlan 300r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action blockr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trapr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.4r")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.2r")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.134r")
	crt.Screen.Send("ip route-static 0.0.0.0 0.0.0.0 10.10.10.254r")
	crt.Screen.Send("interface Vlanif 200r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
        hostnamestr = crt.Dialog.Prompt("Enter hostname:", "hostname", "", False)
        ipaddressstr = crt.Dialog.Prompt("Enter ip address:", "ip", "", False)
	crt.Screen.Send("ip address 10.10.10.")
	crt.Screen.Send(ipaddressstr)
	crt.Screen.Send(" 24r")
	crt.Screen.Send("quitr")
	crt.Screen.Send("sysname ")
	crt.Screen.Send(hostnamestr)
	crt.Screen.Send("r")
	crt.Screen.WaitForString("]")
	crt.Screen.Synchronous = False
main()

Такія скрыпты звычайна не патрэбныя, але колькасць абсталявання - 15 шт. Дазволіла паскорыць настройку. Далей настройваць абсталяванне было хутчэй з дапамогай SecureCRT Command window.

Настройка ўліковага запісу для ssh.

Іншы прыклад. Настройка таксама праз кансоль.

# $language = "Python"
# $interface = "1.0"

# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.

def main():
	crt.Screen.Synchronous = True
	crt.Screen.Send("r")
	crt.Screen.WaitForString("name")
	crt.Screen.Send("adminr")
	crt.Screen.WaitForString("Password:")
	crt.Screen.Send("Passwordr")
	crt.Screen.WaitForString(">")
	crt.Screen.Send("sysr")
	crt.Screen.Send("stelnet server enabler")
	crt.Screen.Send("aaar")
	crt.Screen.Send("local-user admin service-type terminal ftp http sshr")
	crt.Screen.Send("quitr")
	crt.Screen.Send("user-interface vty 0 4r")
	crt.Screen.Send("authentication-mode aaar")
	crt.Screen.Send("quitr")
	crt.Screen.Send("quitr")
	crt.Screen.Synchronous = False
main()


Аб SecureCRT:Платнае ПЗ: ад 99 $ (самы маленькі кошт толькі на SecureCRT на адзін год)
Афіцыйны сайт
1 раз купляецца ліцэнзія на ПЗ, з падтрымкай (для абнаўлення), потым ПЗ выкарыстоўваецца з гэтай ліцэнзіяй неабмежаваны час.

Працуе на аперацыйных сістэмах Mac OS X і Windows.

Ёсць падтрымка скрыптоў (гэты артыкул)
Ёсць Каманднае акно
Serial/Telnet/SSH1/SSH2/Shell Аперацыйнай сістэмы

Крыніца: habr.com