การป้อนข้อมูลอัตโนมัติใน SecureCRT โดยใช้สคริปต์

วิศวกรเครือข่ายมักเผชิญกับงานคัดลอก/วางชิ้นส่วนบางอย่างจากแผ่นจดบันทึกไปยังคอนโซล โดยปกติคุณจะต้องคัดลอกพารามิเตอร์หลายตัว: ชื่อผู้ใช้/รหัสผ่าน และอย่างอื่น การใช้สคริปต์ทำให้กระบวนการนี้เร็วขึ้น แต่งานเขียนสคริปต์และดำเนินการสคริปต์ควรใช้เวลาโดยรวมน้อยกว่าการกำหนดค่าด้วยตนเอง มิฉะนั้น สคริปต์จะไร้ประโยชน์

บทความนี้มีไว้เพื่ออะไร? บทความนี้มาจากซีรี่ส์ Fast Start และมีเป้าหมายเพื่อประหยัดเวลาของวิศวกรเครือข่ายเมื่อตั้งค่าอุปกรณ์ (งานเดียว) บนอุปกรณ์หลายเครื่อง ใช้ซอฟต์แวร์ SecureCRT และฟังก์ชันการทำงานของสคริปต์ในตัว

Содержание

การแนะนำ

โปรแกรม SecureCRT มีกลไกการทำงานของสคริปต์ในตัวตั้งแต่แกะกล่อง สคริปต์เทอร์มินัลมีไว้เพื่ออะไร

  • I/O อัตโนมัติ และการตรวจสอบ I/O ขั้นต่ำ
  • เพิ่มความเร็วในการดำเนินงานประจำ - ลดการหยุดชั่วคราวระหว่างการตั้งค่าอุปกรณ์ (การลดการหยุดชั่วคราวโดยพฤตินัยที่เกิดจากเวลาในการดำเนินการคัดลอก/วางบนฮาร์ดแวร์เดียวกัน โดยใช้ชิ้นส่วนคำสั่งตั้งแต่ 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 => สคริปต์ => เริ่มบันทึกสคริปต์
ข. ดำเนินการกับคอนโซล (ดำเนินการตามขั้นตอนการกำหนดค่าใน CLI)
วี. เขียนสคริปต์ให้เสร็จ:
เมนู SecureCRT => Script => หยุดการบันทึกสคริปต์...
บันทึกไฟล์สคริปต์

ตัวอย่างคำสั่งที่ดำเนินการและสคริปต์ที่บันทึกไว้:

การป้อนข้อมูลอัตโนมัติใน SecureCRT โดยใช้สคริปต์

เรียกใช้สคริปต์บน SecureCRT

หลังจากสร้าง/แก้ไขสคริปต์แล้ว คำถามทั่วไปก็เกิดขึ้น: จะนำสคริปต์ไปใช้อย่างไร
มีหลายวิธี:

  • เรียกใช้ด้วยตนเองจากเมนูสคริปต์
  • เริ่มต้นอัตโนมัติหลังจากการเชื่อมต่อ (สคริปต์การเข้าสู่ระบบ)
  • เข้าสู่ระบบอัตโนมัติโดยไม่ต้องใช้สคริปต์
  • ทริกเกอร์ด้วยตนเองด้วยปุ่มใน SecureCRT (ยังไม่มีการสร้างและเพิ่มปุ่มใน SecureCRT)

เรียกใช้ด้วยตนเองจากเมนูสคริปต์

เมนู SecureCRT => สคริปต์ => เรียกใช้...
- มีการจดจำสคริปต์ 10 รายการล่าสุดและพร้อมใช้งานสำหรับการเปิดตัวอย่างรวดเร็ว:
เมนู SecureCRT => สคริปต์ => 1 "ชื่อไฟล์สคริปต์"
เมนู SecureCRT => สคริปต์ => 2 "ชื่อไฟล์สคริปต์"
เมนู SecureCRT => สคริปต์ => 3 "ชื่อไฟล์สคริปต์"
เมนู SecureCRT => สคริปต์ => 4 "ชื่อไฟล์สคริปต์"
เมนู SecureCRT => สคริปต์ => 5 "ชื่อไฟล์สคริปต์"

เริ่มต้นอัตโนมัติหลังจากการเชื่อมต่อ (สคริปต์การเข้าสู่ระบบ)

การตั้งค่าสคริปต์การบันทึกอัตโนมัติได้รับการกำหนดค่าสำหรับเซสชันที่บันทึกไว้: การเชื่อมต่อ => การดำเนินการเข้าสู่ระบบ => สคริปต์การเข้าสู่ระบบ

การป้อนข้อมูลอัตโนมัติใน SecureCRT โดยใช้สคริปต์

เข้าสู่ระบบอัตโนมัติโดยไม่ต้องใช้สคริปต์

เป็นไปได้ที่จะป้อนชื่อผู้ใช้ของรหัสผ่านโดยอัตโนมัติโดยไม่ต้องเขียนสคริปต์ โดยใช้เฉพาะฟังก์ชันในตัวของ SecureCRT ในการตั้งค่าการเชื่อมต่อ "การเชื่อมต่อ" => การดำเนินการเข้าสู่ระบบ => เข้าสู่ระบบอัตโนมัติ - คุณต้องกรอกข้อมูลหลายกลุ่ม - ซึ่งหมายถึงคู่: "ข้อความที่คาดหวัง" + "อักขระที่ส่งไปยังข้อความนี้" สามารถมีคู่ดังกล่าวได้หลายคู่ (ตัวอย่าง: คู่ที่ 1 รอชื่อผู้ใช้ คู่ที่สองรอรหัสผ่าน คู่ที่สามรอการแจ้งโหมดสิทธิพิเศษ คู่ที่สี่สำหรับรหัสผ่านโหมดสิทธิพิเศษ)

ตัวอย่างการเข้าสู่ระบบอัตโนมัติบน Cisco ASA:

การป้อนข้อมูลอัตโนมัติใน SecureCRT โดยใช้สคริปต์

ทริกเกอร์ด้วยตนเองด้วยปุ่มใน SecureCRT (ยังไม่มีการสร้างและเพิ่มปุ่มใน SecureCRT)

ใน SecureCRT คุณสามารถกำหนดสคริปต์ให้กับปุ่มได้ ปุ่มนี้ถูกเพิ่มไปยังแผงที่สร้างขึ้นเป็นพิเศษสำหรับจุดประสงค์นี้

ก. การเพิ่มพาเนลไปยังอินเทอร์เฟซ: เมนู SecureCRT => ดู => แถบปุ่ม
ข. เพิ่มปุ่มในแผงควบคุมและเพิ่มสคริปต์ – คลิกขวาที่แถบปุ่มแล้วเลือก “ปุ่มใหม่…” จากเมนูบริบท
วี. ในกล่องโต้ตอบ "ปุ่มแผนที่" ในฟิลด์ "การดำเนินการ" เลือกการดำเนินการ (ฟังก์ชัน) "เรียกใช้สคริปต์"
ระบุคำบรรยายสำหรับปุ่ม สีของไอคอนปุ่ม เสร็จสิ้นการตั้งค่าโดยคลิกตกลง

การป้อนข้อมูลอัตโนมัติใน SecureCRT โดยใช้สคริปต์

หมายเหตุ:

แผงควบคุมพร้อมปุ่มเป็นฟังก์ชันที่มีประโยชน์มาก

1. เป็นไปได้ เมื่อเข้าสู่ระบบเซสชันใดเซสชันหนึ่ง เพื่อระบุแผงที่จะเปิดในแท็บนี้ตามค่าเริ่มต้น

2. เป็นไปได้ที่จะตั้งค่าการกระทำที่กำหนดไว้ล่วงหน้าสำหรับการกระทำมาตรฐานพร้อมอุปกรณ์: แสดงเวอร์ชันที่แสดง, แสดงการกำหนดค่าการทำงาน, บันทึกการกำหนดค่า

การป้อนข้อมูลอัตโนมัติใน SecureCRT โดยใช้สคริปต์
ไม่มีการแนบสคริปต์กับปุ่มเหล่านี้ สายการดำเนินการเท่านั้น:

การป้อนข้อมูลอัตโนมัติใน SecureCRT โดยใช้สคริปต์
การตั้งค่า - เพื่อให้เมื่อเปลี่ยนเป็นเซสชัน แผงที่จำเป็นพร้อมปุ่มจะเปิดขึ้นในการตั้งค่าเซสชัน:

การป้อนข้อมูลอัตโนมัติใน SecureCRT โดยใช้สคริปต์
เป็นเรื่องสมเหตุสมผลสำหรับลูกค้าที่จะตั้งค่าสคริปต์แต่ละตัวสำหรับการเข้าสู่ระบบและไปที่แผงควบคุมด้วยคำสั่งที่ใช้บ่อยสำหรับผู้ขาย

การป้อนข้อมูลอัตโนมัติใน SecureCRT โดยใช้สคริปต์
เมื่อคุณกดปุ่ม Go Cisco แผงควบคุมจะสลับไปที่ Cisco Button Bar

การป้อนข้อมูลอัตโนมัติใน SecureCRT โดยใช้สคริปต์

ตัวอย่างการใช้สคริปต์อย่างง่ายและขั้นสูง (ปฏิบัติจากชีวิตจริง.)

สคริปต์ธรรมดาก็เพียงพอแล้วสำหรับเกือบทุกโอกาส แต่เมื่อฉันต้องการทำให้สคริปต์ซับซ้อนขึ้นเล็กน้อย - เพื่อเร่งงานให้เร็วขึ้น ภาวะแทรกซ้อนนี้เพิ่งขอข้อมูลเพิ่มเติมในกล่องโต้ตอบจากผู้ใช้

ขอข้อมูลจากผู้ใช้โดยใช้กล่องโต้ตอบ

ฉันมี 2 ในสคริปต์คำขอข้อมูล นี่คือชื่อโฮสต์และออคเต็ตที่ 4 ของที่อยู่ IP เพื่อดำเนินการนี้ - ฉัน googled วิธีการทำและพบในเว็บไซต์ทางการของ SecureCRT (vandyke) - ฟังก์ชันนี้เรียกว่าพรอมต์

	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") 

สคริปต์ส่วนนี้ขอชื่อโฮสต์และหมายเลขจากออคเต็ตสุดท้าย เนื่องจากมีอุปกรณ์ 15 ชิ้น และข้อมูลแสดงในตาราง จากนั้นฉันก็คัดลอกค่าจากตารางแล้ววางลงในกล่องโต้ตอบ นอกจากนี้สคริปต์ทำงานอย่างอิสระ

การคัดลอก FTP ไปยังอุปกรณ์เครือข่าย

สคริปต์นี้เปิดหน้าต่างคำสั่งของฉัน (เชลล์) และคัดลอกข้อมูลผ่าน 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()

ป้อนชื่อผู้ใช้/รหัสผ่านโดยใช้สคริปต์

การเข้าถึงอุปกรณ์เครือข่ายโดยตรงของลูกค้ารายหนึ่งถูกปิด เป็นไปได้ที่จะเข้าสู่อุปกรณ์โดยเชื่อมต่อกับเกตเวย์เริ่มต้นก่อน จากนั้นเชื่อมต่อกับอุปกรณ์ที่เชื่อมต่ออยู่ ไคลเอนต์ 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 และป้อน

สรุป:

เมื่อเขียนสคริปต์และดำเนินการ ต้องปฏิบัติตามกฎ: เวลาในการเขียนสคริปต์และดำเนินการสคริปต์ไม่ควรนานเกินกว่าเวลาที่ใช้ในทางทฤษฎีในการทำงานเดียวกันด้วยตนเอง (คัดลอก / วางจากแผ่นจดบันทึก การเขียนและแก้ไขจุดบกพร่อง playbook สำหรับ ansible, การเขียนและการดีบักสคริปต์ python) นั่นคือ การใช้สคริปต์ควรประหยัดเวลา และไม่เสียเวลากับการทำงานอัตโนมัติเพียงครั้งเดียวของกระบวนการ (กล่าวคือ เมื่อสคริปต์ไม่ซ้ำกันและจะไม่มีการทำซ้ำอีก) แต่ถ้าสคริปต์ไม่ซ้ำกันและการทำงานอัตโนมัติกับสคริปต์และการเขียน / การดีบักสคริปต์จะใช้เวลาน้อยกว่าการทำด้วยวิธีอื่น (หน้าต่างคำสั่ง ansible) สคริปต์คือทางออกที่ดีที่สุด
การดีบักสคริปต์ สคริปต์จะค่อยๆ เติบโต การดีบักจะเกิดขึ้นเมื่อรันอินบนอุปกรณ์เครื่องแรก เครื่องที่สอง เครื่องที่สาม และเมื่อถึงเครื่องที่สี่ สคริปต์มักจะทำงานได้อย่างสมบูรณ์

การเรียกใช้สคริปต์ (โดยการป้อนชื่อผู้ใช้+รหัสผ่าน) ด้วยเมาส์มักจะเร็วกว่าการคัดลอกชื่อผู้ใช้และรหัสผ่านจากแผ่นจดบันทึก แต่ไม่ปลอดภัยจากมุมมองด้านความปลอดภัย
อีกตัวอย่างหนึ่ง (จริง) เมื่อใช้สคริปต์: คุณไม่มีสิทธิ์เข้าถึงอุปกรณ์เครือข่ายโดยตรง แต่มีความจำเป็นต้องกำหนดค่าอุปกรณ์เครือข่ายทั้งหมด (นำเข้าระบบตรวจสอบ กำหนดค่า Username/password/snmpv3username/password เพิ่มเติม) มีการเข้าถึงเมื่อคุณไปที่สวิตช์หลัก จากนั้นคุณเปิด SSH ไปยังอุปกรณ์อื่น ทำไมคุณใช้ Ansible ไม่ได้ - เนื่องจากเรามีข้อจำกัดเกี่ยวกับจำนวนเซสชันพร้อมกันที่อนุญาตบนอุปกรณ์เครือข่าย (บรรทัด vty 0 4, user-interface vty 0 4) (อีกคำถามหนึ่งคือวิธีเริ่มอุปกรณ์ต่างๆ ใน ​​Ansible ด้วย SSH แรกกระโดดเดียวกัน)

สคริปต์ช่วยลดเวลาระหว่างการทำงานที่ยาวนาน เช่น การคัดลอกไฟล์ผ่าน FTP หลังจากการคัดลอกเสร็จสิ้น สคริปต์จะเริ่มทำงานทันที บุคคลจะต้องเห็นจุดสิ้นสุดของการคัดลอก จากนั้นจึงจะทราบจุดสิ้นสุดของการคัดลอก จากนั้นจึงป้อนคำสั่งที่เหมาะสม สคริปต์ทำงานเร็วขึ้นอย่างเป็นกลาง

สคริปต์มีผลในกรณีที่ไม่สามารถใช้เครื่องมือส่งข้อมูลจำนวนมาก: คอนโซล หรือเมื่อข้อมูลบางอย่างสำหรับอุปกรณ์ไม่ซ้ำกัน: ชื่อโฮสต์ ที่อยู่ IP การจัดการ หรือเมื่อเขียนโปรแกรมและแก้ไขข้อบกพร่องจะยากกว่าการเพิ่มข้อมูลที่ได้รับจากอุปกรณ์ในขณะที่สคริปต์ทำงาน - ตัวอย่างสคริปต์สำหรับกำหนดเส้นทางเมื่ออุปกรณ์แต่ละเครื่องมีที่อยู่ IP ของผู้ให้บริการอินเทอร์เน็ต (เพื่อนร่วมงานของฉันเขียนสคริปต์ดังกล่าว - เมื่อ DMVPN พูดเกิน 3 จำเป็นต้องเปลี่ยนการตั้งค่า DMVPN)

กรณีศึกษา: การกำหนดค่าการตั้งค่าเริ่มต้นบนสวิตช์ใหม่โดยใช้พอร์ตคอนโซล:

A. เสียบสายคอนโซลเข้ากับอุปกรณ์
ข. เรียกใช้สคริปต์
ข. รอการดำเนินการของสคริปต์
D. เสียบสายคอนโซลเข้ากับอุปกรณ์ถัดไป
E. หากสวิตช์ไม่ใช่สวิตช์สุดท้าย ให้ไปที่ขั้นตอน B

อันเป็นผลมาจากการทำงานของสคริปต์:

  • รหัสผ่านเริ่มต้นถูกตั้งค่าบนอุปกรณ์
  • ป้อนชื่อผู้ใช้แล้ว
  • ป้อนที่อยู่ IP เฉพาะของอุปกรณ์

PS การดำเนินการต้องทำซ้ำ เนื่องจากค่าเริ่มต้น ssh ไม่ได้กำหนดค่า/ปิดใช้งาน (ใช่ นี่เป็นความผิดพลาดของฉันเอง)

แหล่งที่ใช้

1. เกี่ยวกับการสร้างสคริปต์
2. ตัวอย่างสคริปต์

ภาคผนวก 1: สคริปต์ตัวอย่าง


ตัวอย่างของสคริปต์ขนาดยาวที่มีข้อความค้นหา 9600 รายการ ได้แก่ ชื่อโฮสต์และที่อยู่ IP มันถูกสร้างขึ้นสำหรับการตั้งค่าล่วงหน้าอุปกรณ์ผ่านคอนโซล (XNUMX baud) และเพื่อเตรียมการเชื่อมต่ออุปกรณ์เข้ากับเครือข่าย

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

การตั้งค่าบัญชีสำหรับ 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 เป็นเวลาหนึ่งปีเท่านั้น)
เว็บไซต์อย่างเป็นทางการ
การซื้อใบอนุญาตซอฟต์แวร์ครั้งเดียวพร้อมการสนับสนุน (สำหรับการอัปเดต) จากนั้นซอฟต์แวร์จะถูกใช้กับใบอนุญาตนี้โดยไม่จำกัดเวลา

ทำงานบนระบบปฏิบัติการ Mac OS X และ Windows

มีการสนับสนุนสคริปต์ (บทความนี้)
มี หน้าต่างคำสั่ง
ระบบปฏิบัติการ Serial/Telnet/SSH1/SSH2/Shell

ที่มา: will.com