Automatisera inmatning i SecureCRT med hjälp av skript

Nätverksingenjörer står ofta inför uppgiften att kopiera/klistra in vissa fragment från ett anteckningsblock till konsolen. Du måste vanligtvis kopiera flera parametrar: Användarnamn/Lösenord och något annat. Användningen av skript gör att du kan påskynda denna process. MEN uppgifterna att skriva skriptet och köra skriptet bör ta kortare tid totalt än manuell konfiguration, annars är skripten värdelösa.

Vad är den här artikeln till för? Den här artikeln är från Fast Start-serien och syftar till att spara tid för nätverksingenjörer när de installerar utrustning (en enda uppgift) på flera enheter. Använder SecureCRT-programvara och inbyggd skriptexekveringsfunktion.

Innehåll

Inledning

SecureCRT-programmet har en inbyggd skriptexekveringsmekanism direkt. Vad är terminalskript till för?

  • Automatiserad I/O och minimal I/O-validering.
  • Snabba upp utförandet av rutinuppgifter - minska pauser mellan utrustningsinställningar. (De facto minskning av pauser orsakade av tid för att utföra kopierings-/tidigare åtgärder på samma hårdvara, med 3 eller fler kommandofragment som ska tillämpas på hårdvaran.)

Detta dokument täcker uppgifterna:

  • Skapande av enkla skript.
  • Köra skript på SecureCRT.
  • Exempel på att använda enkla och avancerade skript. (Öva från verkliga livet.)

Skapande av enkla skript.

De enklaste skripten använder bara två kommandon, Send och WaitForString. Denna funktion räcker för 90 % (eller mer) av de utförda uppgifterna.

Skript kan fungera i Python, JS, VBS (Visual Basic), Perl, etc.

Python

# $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()

Vanligtvis en fil med tillägget "*.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

Vanligtvis en fil med tillägget "*.vbs"

Skapa ett skript med hjälp av en skriptpost.

Låter dig automatisera processen att skriva ett manus. Du börjar skriva ett manus. SecureCRT registrerar kommandona och det efterföljande hårdvarusvaret och visar det färdiga skriptet åt dig.

A. Börja skriva manus:
SecureCRT Meny => Skript => Börja spela in skript
b. Utför åtgärder med konsolen (utför konfigurationssteg i CLI).
V. Skriv klart manuset:
SecureCRT-meny => Skript => Stoppa inspelning av manus...
Spara skriptfilen.

Exempel på körda kommandon och sparat skript:

Automatisera inmatning i SecureCRT med hjälp av skript

Köra skript på SecureCRT.

Efter att ha skapat/redigerat manuset uppstår en naturlig fråga: Hur applicerar man manuset?
Det finns flera sätt:

  • Körs manuellt från Script-menyn
  • Automatisk start efter anslutning (inloggningsskript)
  • Automatisk inloggning utan att använda ett skript
  • Utlöses manuellt med en knapp i SecureCRT (en knapp har ännu inte skapats och lagts till i SecureCRT)

Körs manuellt från Script-menyn

SecureCRT Menu => Skript => Kör...
- De senaste 10 skripten kommer ihåg och tillgängliga för snabbstart:
SecureCRT-meny => Skript => 1 "Skriptfilnamn"
SecureCRT-meny => Skript => 2 "Skriptfilnamn"
SecureCRT-meny => Skript => 3 "Skriptfilnamn"
SecureCRT-meny => Skript => 4 "Skriptfilnamn"
SecureCRT-meny => Skript => 5 "Skriptfilnamn"

Automatisk start efter anslutning (inloggningsskript)

Inställningar för automatiska loggningsskript är konfigurerade för den sparade sessionen: Anslutning => Inloggningsåtgärder => Inloggningsskript

Automatisera inmatning i SecureCRT med hjälp av skript

Automatisk inloggning utan att använda ett skript

Det är möjligt att automatiskt ange användarnamnet för lösenordet utan att skriva ett skript, med endast den inbyggda funktionaliteten i SecureCRT. I anslutningsinställningarna “Anslutning” => Inloggningsåtgärder => Automatisera inloggning – du måste fylla i flera paket – vilket innebär paren: “Förväntad text” + “Skickade tecken till denna text” kan det finnas många sådana par. (Exempel: 1:a paret väntar på användarnamn, andra väntar på lösenord, tredje väntar på prompt i privilegierat läge, fjärde paret på privilegierat läge lösenord.)

Exempel på automatisk inloggning på Cisco ASA:

Automatisera inmatning i SecureCRT med hjälp av skript

Utlöses manuellt med en knapp i SecureCRT (en knapp har ännu inte skapats och lagts till i SecureCRT)

I SecureCRT kan du tilldela ett skript till en knapp. Knappen läggs till i en panel speciellt skapad för detta ändamål.

A. Lägga till en panel till gränssnittet: SecureCRT Menu => View => Button Bar
b. Lägg till en knapp på panelen och lägg till ett skript. – Högerklicka på knappraden och välj "Ny knapp..." från snabbmenyn.
V. I "Map Button"-dialogrutan, i "Action"-fältet, välj "Kör script"-åtgärden (funktionen).
Ange en bildtext för knappen. Färgen för knappikonen. Avsluta inställningarna genom att klicka på Ok.

Automatisera inmatning i SecureCRT med hjälp av skript

Notera:

Panelen med knappar är mycket användbar funktionalitet.

1. Det är möjligt, när du loggar in på en specifik session, att ange vilken panel som ska öppnas för denna flik som standard.

2. Det är möjligt att ställa in fördefinierade åtgärder för standardåtgärder med utrustning: visa visa version, visa running-config, spara konfiguration.

Automatisera inmatning i SecureCRT med hjälp av skript
Inget skript är kopplat till dessa knappar. Endast åtgärdsrad:

Automatisera inmatning i SecureCRT med hjälp av skript
Inställning - så att när du byter till en session öppnas den nödvändiga panelen med knappar i sessionsinställningarna:

Automatisera inmatning i SecureCRT med hjälp av skript
Det är vettigt för kunden att ställa in individuella skript för inloggning och gå till panelen med frekventa kommandon för leverantören.

Automatisera inmatning i SecureCRT med hjälp av skript
När du trycker på Go Cisco-knappen växlar panelen till Cisco Button Bar.

Automatisera inmatning i SecureCRT med hjälp av skript

Exempel på att använda enkla och avancerade skript. (Öva från verkliga livet.)

Enkla manus räcker till nästan alla tillfällen. Men en gång behövde jag komplicera manuset lite – för att påskynda arbetet. Denna komplikation begärde helt enkelt ytterligare data i en dialogruta från användaren.

Begär data från användaren med hjälp av en dialogruta

Jag hade 2 i databegäransskriptet. Detta är värdnamnet och den fjärde oktetten av IP-adressen. För att utföra denna åtgärd - jag googlade hur man gör det och hittade det på den officiella webbplatsen för SecureCRT (vandyke). - Funktionaliteten kallas 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") 

Den här delen av skriptet bad om värdnamn och nummer från den sista oktetten. Eftersom det fanns 15 stycken utrustning. Och data presenterades i en tabell, sedan kopierade jag värdena från tabellen och klistrade in dem i dialogrutorna. Vidare fungerade manuset självständigt.

FTP-kopiering till nätverksutrustning.

Det här skriptet startade mitt kommandofönster (skal) och kopierade data via FTP. Stäng sessionen i slutet. Det är omöjligt att använda anteckningsblock för detta, eftersom kopieringen tar väldigt lång tid och data i FTP-bufferten kommer inte att lagras så länge:

# $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()

Ange användarnamn/lösenord med ett skript

Hos en kund stängdes direkt åtkomst till nätverksutrustning. Det var möjligt att komma in i utrustningen genom att först ansluta till Default Gateway och från den sedan till utrustningen som var ansluten till den. ssh-klienten inbyggd i IOS/hårdvaruprogramvaran användes för att ansluta. Följaktligen begärdes användarnamnet och lösenordet i konsolen. Med skriptet nedan angavs användarnamnet och lösenordet automatiskt:

# $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()

Obs: Det fanns 2 skript: ett för administratörskontot, det andra för eSIGHT-kontot.

Skript med möjlighet att direkt lägga till data under skriptkörning.

Uppgiften var att lägga till en statisk rutt på all nätverksutrustning. Men gatewayen till Internet på varje utrustning var annorlunda (och den skiljde sig från standardgatewayen). Följande skript visade routingtabellen, gick in i konfigurationsläget, skrev inte kommandot till slutet (IP-adressen för gatewayen till Internet) - jag lade till den här delen. Efter att jag tryckte på Enter fortsatte skriptet att köra kommandot.

# $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()

I det här skriptet, på raden: crt.Screen.Send("ip route 10.10.10.8 255.255.255.252 ") läggs inte IP-adressen till gatewayen till och det finns inget vagnreturtecken. Skriptet väntar på nästa rad med tecknen "(config) #" Dessa tecken dök upp efter att jag skrev in ip-adressen och skrev in.

slutsats:

När man skriver ett manus och kör det måste regeln följas: Tiden för att skriva ett manus och exekvera ett manus bör aldrig vara mer än den tid man teoretiskt lägger ner på att göra samma arbete manuellt (kopiera/klistra in från ett anteckningsblock, skriva och felsöka en spelbok för ansible, skriva och felsöka python-skript). Det vill säga att användningen av skriptet ska spara tid och inte slösa tid på engångsautomatisering av processer (dvs när skriptet är unikt och det inte blir fler upprepningar). Men om skriptet är unikt och automatisering med skriptet och att skriva/felsöka skriptet tar mindre tid än att göra det på något annat sätt (ansible, kommandofönster), så är skriptet den bästa lösningen.
Felsökning av ett skript. Skriptet växer gradvis, felsökning sker vid inkörningen på den första, andra, tredje enheten, och vid den fjärde kommer skriptet med största sannolikhet att vara fullt fungerande.

Att köra ett skript (genom att ange användarnamn+lösenord) med musen är vanligtvis snabbare än att kopiera användarnamn och lösenord från ett anteckningsblock. Men inte säkert ur säkerhetssynpunkt.
Ett annat (riktigt) exempel när du använder ett script: Du har inte direkt tillgång till nätverksutrustning. Men det finns ett behov av att konfigurera all nätverksutrustning (ta in den i övervakningssystemet, konfigurera ytterligare ett användarnamn/lösenord/snmpv3användarnamn/lösenord). Det finns åtkomst när du går till Core-switchen, från den öppnar du SSH till annan utrustning. Varför kan du inte använda Ansible. - Eftersom vi stöter på en gräns för antalet tillåtna samtidiga sessioner på nätverksutrustning (linje vty 0 4, användargränssnitt vty 0 4) (en annan fråga är hur man startar olika utrustningar i Ansible med samma SSH första hopp).

Skriptet minskar tiden under långa operationer – till exempel kopiering av filer via FTP. Efter att kopieringen är klar börjar skriptet omedelbart att fungera. En person kommer att behöva se slutet av kopieringen, sedan inse slutet av kopieringen och sedan ange lämpliga kommandon. Manuset gör det objektivt snabbare.

Skript är tillämpliga där det är omöjligt att använda verktyg för massdataleverans: Konsol. Eller när en del av data för utrustningen är unik: värdnamn, hanterings-ip-adress. Eller när man skriver ett program och felsöker är det svårare än att lägga till data som tas emot från utrustningen medan skriptet körs. - Ett exempel med ett script för att föreskriva en rutt, när varje utrustning har sin egen IP-adress till internetleverantören. (Mina kollegor skrev sådana skript - när DMVPN talade var över 3. Det var nödvändigt att ändra DMVPN-inställningarna).

Fallstudie: Konfigurera initiala inställningar på en ny switch med hjälp av konsolportarna:

A. Anslut konsolkabeln till enheten.
B. Kör skriptet
B. Väntade på körningen av manuset
D. Anslut konsolkabeln till nästa enhet.
E. Om omkopplaren inte är den sista, gå till steg B.

Som ett resultat av manusets arbete:

  • det ursprungliga lösenordet är inställt på utrustningen.
  • Användarnamn angett
  • enhetens unika IP-adress anges.

PS operationen var tvungen att upprepas. Eftersom standard ssh inte var konfigurerad/inaktiverad. (Ja, detta är mitt misstag.)

Använda källor.

1. Om att skapa manus
2. Manusexempel

Bilaga 1: Exempelskript.


Ett exempel på ett långt skript, med två frågor: Värdnamn och IP-adress. Den skapades för att förinställa utrustning via konsolen (9600 baud). Och även för att förbereda anslutningen av utrustning till nätverket.

# $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()

Sådana skript behövs vanligtvis inte, men mängden utrustning är 15 st. Tillåtet snabbare installation. Det gick snabbare att ställa in utrustningen med SecureCRT Command-fönstret.

Skapa ett konto för ssh.

Ett annat exempel. Konfiguration sker också via konsolen.

# $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()


Om SecureCRT:Betald programvara: från $99 (det lägsta priset är endast för SecureCRT i ett år)
Officiell hemsida
En mjukvarulicens köps en gång, med support (för uppdatering), sedan används programvaran med denna licens under en obegränsad tid.

Fungerar på Mac OS X och Windows operativsystem.

Det finns skriptstöd (den här artikeln)
Det finns kommandofönstret
Operativsystem Serial/Telnet/SSH1/SSH2/Shell

Källa: will.com