Tự động hóa mục nhập trong SecureCRT bằng cách sử dụng tập lệnh

Các kỹ sư mạng thường phải đối mặt với nhiệm vụ sao chép/dán một số đoạn nhất định từ notepad sang bảng điều khiển. Bạn thường phải sao chép một số tham số: Tên người dùng/Mật khẩu và một số thứ khác. Việc sử dụng các tập lệnh cho phép bạn tăng tốc quá trình này. NHƯNG các tác vụ viết tập lệnh và thực thi tập lệnh sẽ mất ít thời gian hơn so với cấu hình thủ công, nếu không thì các tập lệnh sẽ vô dụng.

Bài viết này để làm gì? Bài viết này nằm trong loạt bài Khởi động nhanh và nhằm mục đích tiết kiệm thời gian cho các kỹ sư mạng khi thiết lập thiết bị (tác vụ đơn lẻ) trên nhiều thiết bị. Sử dụng phần mềm SecureCRT và chức năng thực thi tập lệnh tích hợp.

nội dung

Giới thiệu

Chương trình SecureCRT có cơ chế thực thi tập lệnh tích hợp sẵn. Tập lệnh đầu cuối để làm gì?

  • I/O tự động và xác thực I/O tối thiểu.
  • Tăng tốc độ thực hiện các tác vụ thông thường - giảm tạm dừng giữa các cài đặt thiết bị. (Trên thực tế, việc giảm tạm dừng do thời gian thực hiện các hành động sao chép/quá khứ trên cùng một phần cứng, với 3 đoạn lệnh trở lên được áp dụng cho phần cứng.)

Tài liệu này bao gồm các nhiệm vụ:

  • Tạo các kịch bản đơn giản.
  • Chạy tập lệnh trên SecureCRT.
  • Ví dụ về sử dụng tập lệnh đơn giản và nâng cao. (Thực hành từ cuộc sống thực.)

Tạo các kịch bản đơn giản.

Các tập lệnh đơn giản nhất chỉ sử dụng hai lệnh, Send và WaitForString. Chức năng này đủ cho 90% (hoặc hơn) các tác vụ được thực hiện.

Tập lệnh có thể hoạt động trong Python, JS, VBS (Visual Basic), Perl, v.v.

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

Thường là một tệp có phần mở rộng "*.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

Thường là một tệp có phần mở rộng "*.vbs"

Tạo tập lệnh bằng mục nhập tập lệnh.

Cho phép bạn tự động hóa quá trình viết kịch bản. Bạn bắt đầu viết một kịch bản. SecureCRT ghi lại các lệnh và phản hồi phần cứng tiếp theo, đồng thời hiển thị tập lệnh đã hoàn thành cho bạn.

MỘT. Bắt đầu viết kịch bản:
Menu SecureCRT => Tập lệnh => Bắt đầu ghi tập lệnh
b. Thực hiện các thao tác với bảng điều khiển (thực hiện các bước cấu hình trong CLI).
v.v. Viết xong kịch bản:
Menu SecureCRT => Tập lệnh => Dừng ghi tập lệnh…
Lưu tập tin kịch bản.

Ví dụ về các lệnh đã thực hiện và tập lệnh đã lưu:

Tự động hóa mục nhập trong SecureCRT bằng cách sử dụng tập lệnh

Chạy tập lệnh trên SecureCRT.

Sau khi tạo/chỉnh sửa tập lệnh, một câu hỏi tự nhiên xuất hiện: Làm cách nào để áp dụng tập lệnh?
Có một số cách:

  • Chạy thủ công từ menu Script
  • Tự động bắt đầu sau khi kết nối (tập lệnh đăng nhập)
  • Đăng nhập tự động mà không cần sử dụng tập lệnh
  • Kích hoạt thủ công bằng một nút trong SecureCRT (một nút chưa được tạo và thêm vào SecureCRT)

Chạy thủ công từ menu Script

Menu SecureCRT => Tập lệnh => Chạy…
- 10 tập lệnh cuối cùng được ghi nhớ và có sẵn để khởi chạy nhanh:
Menu SecureCRT => Tập lệnh => 1 "Tên tệp tập lệnh"
Menu SecureCRT => Tập lệnh => 2 "Tên tệp tập lệnh"
Menu SecureCRT => Tập lệnh => 3 "Tên tệp tập lệnh"
Menu SecureCRT => Tập lệnh => 4 "Tên tệp tập lệnh"
Menu SecureCRT => Tập lệnh => 5 "Tên tệp tập lệnh"

Tự động bắt đầu sau khi kết nối (tập lệnh đăng nhập)

Cài đặt tập lệnh ghi nhật ký tự động được định cấu hình cho phiên đã lưu: Kết nối => Hành động đăng nhập => Tập lệnh đăng nhập

Tự động hóa mục nhập trong SecureCRT bằng cách sử dụng tập lệnh

Đăng nhập tự động mà không cần sử dụng tập lệnh

Có thể tự động nhập tên người dùng của mật khẩu mà không cần viết tập lệnh, chỉ sử dụng chức năng tích hợp của SecureCRT. Trong cài đặt kết nối “Kết nối” => Thao tác đăng nhập => Đăng nhập tự động - bạn cần điền vào một số gói - nghĩa là các cặp: “Văn bản mong đợi” + “Ký tự đã gửi tới văn bản này” có thể có nhiều cặp như vậy. (Ví dụ: cặp thứ nhất chờ tên người dùng, cặp thứ hai chờ mật khẩu, cặp thứ ba chờ lời nhắc chế độ đặc quyền, cặp thứ tư chờ mật khẩu chế độ đặc quyền.)

Ví dụ về đăng nhập tự động trên Cisco ASA:

Tự động hóa mục nhập trong SecureCRT bằng cách sử dụng tập lệnh

Kích hoạt thủ công bằng một nút trong SecureCRT (một nút chưa được tạo và thêm vào SecureCRT)

Trong SecureCRT, bạn có thể gán tập lệnh cho một nút. Nút này được thêm vào bảng điều khiển được tạo riêng cho mục đích này.

MỘT. Thêm panel vào giao diện: SecureCRT Menu => View => Button Bar
b. Thêm một nút vào bảng điều khiển và thêm một tập lệnh. – Nhấp chuột phải vào Thanh nút và chọn “Nút mới…” từ menu ngữ cảnh.
v.v. Trong hộp thoại "Nút bản đồ", trong trường "Hành động", chọn hành động (chức năng) "Chạy tập lệnh".
Chỉ định chú thích cho nút. Màu sắc cho biểu tượng nút. Kết thúc cài đặt bằng cách nhấp vào Ok.

Tự động hóa mục nhập trong SecureCRT bằng cách sử dụng tập lệnh

Lưu ý:

Bảng điều khiển với các nút chức năng rất hữu ích.

1. Có thể, khi Đăng nhập vào một phiên cụ thể, để chỉ định bảng điều khiển nào sẽ mở cho tab này theo mặc định.

2. Có thể thiết lập các hành động được xác định trước cho các hành động tiêu chuẩn với thiết bị: hiển thị phiên bản hiển thị, hiển thị cấu hình đang chạy, lưu cấu hình.

Tự động hóa mục nhập trong SecureCRT bằng cách sử dụng tập lệnh
Không có tập lệnh nào được đính kèm với các nút này. Chỉ dòng hành động:

Tự động hóa mục nhập trong SecureCRT bằng cách sử dụng tập lệnh
Cài đặt - để khi chuyển sang phiên, bảng điều khiển cần thiết có các nút sẽ mở ra trong cài đặt phiên:

Tự động hóa mục nhập trong SecureCRT bằng cách sử dụng tập lệnh
Sẽ hợp lý nếu khách hàng thiết lập các tập lệnh riêng lẻ để Đăng nhập và chuyển đến bảng điều khiển với các lệnh thường xuyên dành cho nhà cung cấp.

Tự động hóa mục nhập trong SecureCRT bằng cách sử dụng tập lệnh
Khi bạn nhấn nút Go Cisco, bảng điều khiển sẽ chuyển sang Cisco Button Bar.

Tự động hóa mục nhập trong SecureCRT bằng cách sử dụng tập lệnh

Ví dụ về sử dụng tập lệnh đơn giản và nâng cao. (Thực hành từ cuộc sống thực.)

Kịch bản đơn giản là đủ cho hầu hết các trường hợp. Nhưng một khi tôi cần làm phức tạp kịch bản một chút - để tăng tốc công việc. Sự phức tạp này chỉ đơn giản là yêu cầu dữ liệu bổ sung trong hộp thoại từ người dùng.

Yêu cầu dữ liệu từ người dùng bằng hộp thoại

Tôi có 2 trong tập lệnh yêu cầu dữ liệu. Đây là Tên máy chủ và octet thứ 4 của địa chỉ IP. Để thực hiện thao tác này - Tôi đã tìm hiểu cách thực hiện trên google và tìm thấy nó trên trang web chính thức của SecureCRT (vandyke). - chức năng được gọi là dấu nhắc.

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

Phần này của tập lệnh đã yêu cầu Tên máy chủ và các số từ octet cuối cùng. Vì có 15 thiết bị. Và dữ liệu được trình bày trong một bảng, sau đó tôi sao chép các giá trị từ bảng và dán vào các hộp thoại. Hơn nữa, kịch bản hoạt động độc lập.

Sao chép FTP vào thiết bị mạng.

Tập lệnh này đã khởi chạy cửa sổ lệnh (shell) của tôi và sao chép dữ liệu qua FTP. Cuối cùng, đóng phiên. Không thể sử dụng notepad cho việc này vì việc sao chép mất rất nhiều thời gian và dữ liệu trong bộ đệm FTP sẽ không được lưu trữ lâu như vậy:

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

Nhập tên người dùng/mật khẩu bằng tập lệnh

Tại một thời điểm khách hàng truy cập trực tiếp vào thiết bị mạng đã bị đóng. Có thể vào thiết bị bằng cách kết nối đầu tiên với Cổng mặc định, rồi từ đó đến thiết bị được kết nối với nó. Máy khách ssh được tích hợp trong phần mềm IOS/phần cứng đã được sử dụng để kết nối. Theo đó, tên người dùng và mật khẩu đã được yêu cầu trong bảng điều khiển. Với tập lệnh bên dưới, tên người dùng và mật khẩu đã được nhập tự động:

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

Lưu ý: Có 2 tập lệnh, một dành cho tài khoản quản trị viên, tập lệnh thứ hai dành cho tài khoản eSIGHT.

Tập lệnh có khả năng nối thêm dữ liệu trực tiếp trong quá trình thực thi tập lệnh.

Nhiệm vụ là thêm một tuyến tĩnh trên tất cả các thiết bị mạng. Nhưng cổng vào Internet trên mỗi thiết bị là khác nhau (và nó khác với cổng mặc định). Đoạn script sau hiển thị bảng định tuyến, vào chế độ cấu hình, không ghi lệnh vào cuối (địa chỉ IP của cổng vào Internet) - Tôi đã thêm phần này. Sau khi tôi nhấn Enter, tập lệnh tiếp tục thực thi lệnh.

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

Trong tập lệnh này, trong dòng: crt.Screen.Send("ip route 10.10.10.8 255.255.255.252 ") địa chỉ IP của cổng không được thêm vào và không có ký tự xuống dòng. Tập lệnh đang đợi dòng tiếp theo có ký tự "(config) #" Các ký tự này xuất hiện sau khi tôi nhập địa chỉ ip và nhập.

Kết luận:

Khi viết và thực thi tập lệnh, phải tuân theo quy tắc: Thời gian để viết tập lệnh và thực thi tập lệnh không bao giờ được nhiều hơn thời gian về mặt lý thuyết dành cho việc thực hiện cùng một công việc theo cách thủ công (sao chép/dán từ notepad, viết và gỡ lỗi một playbook cho ansible, viết và gỡ lỗi tập lệnh python). Nghĩa là, việc sử dụng tập lệnh sẽ tiết kiệm thời gian và không lãng phí thời gian vào việc tự động hóa các quy trình một lần (nghĩa là khi tập lệnh là duy nhất và sẽ không còn sự lặp lại nữa). Nhưng nếu tập lệnh là duy nhất và tự động hóa với tập lệnh và viết/gỡ lỗi tập lệnh mất ít thời gian hơn so với thực hiện theo bất kỳ cách nào khác (ansible, cửa sổ lệnh), thì tập lệnh là giải pháp tốt nhất.
Gỡ lỗi một tập lệnh. Tập lệnh phát triển dần dần, quá trình gỡ lỗi diễn ra khi chạy trên thiết bị thứ nhất, thứ hai, thứ ba và đến thiết bị thứ tư, tập lệnh rất có thể sẽ hoạt động đầy đủ.

Chạy tập lệnh (bằng cách nhập tên người dùng + mật khẩu) bằng chuột thường nhanh hơn sao chép Tên người dùng và Mật khẩu từ notepad. Nhưng không an toàn từ quan điểm bảo mật.
Một ví dụ (thực tế) khác khi sử dụng tập lệnh: Bạn không có quyền truy cập trực tiếp vào thiết bị mạng. Nhưng cần phải cấu hình tất cả các thiết bị mạng (đưa vào hệ thống giám sát, cấu hình thêm Username/password/snmpv3username/password). Có quyền truy cập khi bạn chuyển đến Core switch, từ đó bạn mở SSH sang các thiết bị khác. Tại sao bạn không thể sử dụng Ansible. - Bởi vì chúng tôi gặp phải giới hạn về số lượng phiên đồng thời được phép trên thiết bị mạng (dòng vty 0 4, giao diện người dùng vty 0 4) (một câu hỏi khác là làm thế nào để khởi động các thiết bị khác nhau trong Ansible với cùng một bước nhảy SSH đầu tiên).

Tập lệnh giảm thời gian trong các thao tác dài - ví dụ: sao chép tệp qua FTP. Sau khi sao chép xong, tập lệnh ngay lập tức bắt đầu hoạt động. Một người sẽ cần xem kết thúc sao chép, sau đó nhận ra kết thúc sao chép, sau đó nhập các lệnh thích hợp. Kịch bản thực hiện nó một cách khách quan nhanh hơn.

Các tập lệnh được áp dụng khi không thể sử dụng các công cụ phân phối dữ liệu hàng loạt: Console. Hoặc khi một số dữ liệu cho thiết bị là duy nhất: tên máy chủ, địa chỉ ip quản lý. Hoặc khi viết chương trình và gỡ lỗi sẽ khó hơn là thêm dữ liệu nhận được từ thiết bị trong khi tập lệnh đang chạy. - Một ví dụ với tập lệnh chỉ định tuyến đường, khi mỗi thiết bị có địa chỉ IP riêng của nhà cung cấp Internet. (Các đồng nghiệp của tôi đã viết các tập lệnh như vậy - khi DMVPN có hơn 3 lượt phát biểu. Cần phải thay đổi cài đặt DMVPN).

Nghiên cứu điển hình: Định cấu hình Cài đặt ban đầu trên Công tắc mới bằng Cổng điều khiển:

A. Đã cắm cáp điều khiển vào thiết bị.
B. Chạy tập lệnh
B. Chờ thực thi tập lệnh
D. Đã cắm cáp điều khiển vào thiết bị tiếp theo.
E. Nếu công tắc không phải là công tắc cuối cùng, hãy chuyển sang bước B.

Là kết quả của công việc của kịch bản:

  • mật khẩu ban đầu được đặt trên thiết bị.
  • Tên người dùng đã nhập
  • địa chỉ IP duy nhất của thiết bị được nhập.

PS các hoạt động đã phải được lặp lại. Bởi vì ssh mặc định không được định cấu hình/tắt. (Vâng, đây là sai lầm của tôi.)

Nguồn đã qua sử dụng.

1. Giới thiệu về tạo tập lệnh
2. ví dụ kịch bản

Phụ lục 1: Các kịch bản mẫu.


Ví dụ về một tập lệnh dài, với hai truy vấn: Tên máy chủ và địa chỉ IP. Nó được tạo ra để cài đặt trước thiết bị thông qua bảng điều khiển (9600 baud). Và cũng để chuẩn bị kết nối thiết bị với mạng.

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

Các tập lệnh như vậy thường không cần thiết, nhưng số lượng thiết bị là 15 chiếc. Cho phép thiết lập nhanh hơn. Cài đặt thiết bị bằng cửa sổ Lệnh SecureCRT nhanh hơn.

Thiết lập một tài khoản cho ssh.

Một vi dụ khac. Cấu hình cũng thông qua bảng điều khiển.

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


Giới thiệu về SecureCRT:Phần mềm trả phí: từ 99$ (giá nhỏ nhất chỉ dành cho SecureCRT XNUMX năm)
Trang web chính thức
Giấy phép phần mềm được mua một lần, với sự hỗ trợ (để cập nhật), sau đó phần mềm được sử dụng với giấy phép này trong thời gian không giới hạn.

Hoạt động trên hệ điều hành Mac OS X và Windows.

Có hỗ trợ kịch bản (bài viết này)
Cửa sổ lệnh
Nối tiếp/Telnet/SSH1/SSH2/Hệ điều hành Shell

Nguồn: www.habr.com