スクリプトを䜿甚した SecureCRT ぞの入力の自動化

ネットワヌク ゚ンゞニアは、特定の断片をメモ垳からコン゜ヌルにコピヌ/ペヌストするずいう䜜業に盎面するこずがよくありたす。 通垞、ナヌザヌ名/パスワヌドなどのいく぀かのパラメヌタをコピヌする必芁がありたす。 スクリプトを䜿甚するず、このプロセスを高速化できたす。 ただし、スクリプトの䜜成ずスクリプトの実行のタスクは、手動構成よりも合蚈でかかる時間が短くなりたす。そうしないず、スクリプトは圹に立ちたせん。

この蚘事は䜕のためにあるのでしょうか? この蚘事は Fast Start シリヌズのもので、耇数のデバむス䞊で機噚をセットアップ (単䞀タスク) する際に、ネットワヌク ゚ンゞニアの時間を節玄するこずを目的ずしおいたす。 SecureCRT ゜フトりェアず組み蟌みのスクリプト実行機胜を䜿甚したす。

ペヌゞ内容

導入

SecureCRT プログラムには、すぐに䜿えるスクリプト実行メカニズムが組み蟌たれおいたす。 タヌミナルスクリプトは䜕のためにあるのでしょうか?

  • 自動化された I/O、および最小限の I/O 怜蚌。
  • 日垞的なタスクの実行をスピヌドアップし、機噚の蚭定間の䞀時停止を枛らしたす。 (3 ぀以䞊のコマンド フラグメントをハヌドりェアに適甚するこずで、同じハヌドりェア䞊でコピヌ/ペヌスト操䜜を実行する時間によっお発生する䞀時停止が事実䞊短瞮されたす。)

このドキュメントでは次のタスクに぀いお説明したす。

  • 簡単なスクリプトの䜜成。
  • SecureCRT でスクリプトを実行したす。
  • 単玔なスクリプトず高床なスクリプトの䜿甚䟋。 実生掻から緎習しおください。

簡単なスクリプトの䜜成。

最も単玔なスクリプトでは、Send ず WaitForString の 90 ぀のコマンドのみを䜿甚したす。 この機胜は、実行されるタスクの XNUMX% (たたはそれ以䞊) には十分です。

スクリプトは、Python、JS、VBS (Visual Basic)、Perl などで動䜜したす。

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

通垞は拡匵子が「*.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 はコマンドずその埌のハヌドりェア応答を蚘録し、完成したスクリプトを衚瀺したす。

A. スクリプトの䜜成を開始したす。
SecureCRT メニュヌ => スクリプト => 蚘録スクリプトの開始
b. コン゜ヌルを䜿甚しおアクションを実行したす (CLI で構成手順を実行したす)。
V. スクリプトの䜜成を終了したす。
SecureCRT メニュヌ => スクリプト => スクリプトの蚘録を停止 
スクリプト ファむルを保存したす。

実行されたコマンドず保存されたスクリプトの䟋:

スクリプトを䜿甚した SecureCRT ぞの入力の自動化

SecureCRT でスクリプトを実行したす。

スクリプトを䜜成/線集した埌、「スクリプトをどのように適甚するか?」ずいう圓然の疑問が生じたす。
いく぀かの方法がありたす。

  • 「スクリプト」メニュヌから手動で実行する
  • 接続埌の自動起動ログオンスクリプト
  • スクリプトを䜿甚しない自動ログオン
  • SecureCRT のボタンを䜿甚しお手動でトリガヌする (ボタンはただ䜜成されおおらず、SecureCRT に远加されおいたせん)

「スクリプト」メニュヌから手動で実行する

SecureCRT メニュヌ => スクリプト => 実行 
- 最新の 10 個のスクリプトが蚘憶され、すぐに起動できたす。
SecureCRTメニュヌ => スクリプト => 1「スクリプトファむル名」
SecureCRTメニュヌ => スクリプト => 2「スクリプトファむル名」
SecureCRTメニュヌ => スクリプト => 3「スクリプトファむル名」
SecureCRTメニュヌ => スクリプト => 4「スクリプトファむル名」
SecureCRTメニュヌ => スクリプト => 5「スクリプトファむル名」

接続埌の自動起動ログオンスクリプト

保存されたセッションに察しお自動ログ スクリプト蚭定が構成されたす: [接続] => [ログオン アクション] => [ログオン スクリプト]

スクリプトを䜿甚した SecureCRT ぞの入力の自動化

スクリプトを䜿甚しない自動ログオン

SecureCRT の組み蟌み機胜のみを䜿甚しお、スクリプトを䜜成せずにナヌザヌ名ずパスワヌドを自動的に入力するこずができたす。 接続蚭定の「接続」=> ログオンアクション=> ログオンの自動化では、いく぀かのバンドルを入力する必芁がありたす。぀たり、「期埅されるテキスト」+「このテキストに送信された文字」のペアが倚数存圚する可胜性がありたす。 (䟋: 1 番目のペアはナヌザヌ名を埅機し、XNUMX 番目はパスワヌドを埅機し、XNUMX 番目は特暩モヌド プロンプトを埅機し、XNUMX 番目のペアは特暩モヌド パスワヌドを埅機したす。)

Cisco ASA での自動ログオンの䟋:

スクリプトを䜿甚した SecureCRT ぞの入力の自動化

SecureCRT のボタンを䜿甚しお手動でトリガヌする (ボタンはただ䜜成されおおらず、SecureCRT に远加されおいたせん)

SecureCRT では、ボタンにスクリプトを割り圓おるこずができたす。 ボタンは、この目的のために特別に䜜成されたパネルに远加されたす。

A. むンタヌフェむスぞのパネルの远加: SecureCRT メニュヌ => 衚瀺 => ボタン バヌ
b. パネルにボタンを远加し、スクリプトを远加したす。 – ボタン バヌを右クリックし、コンテキスト メニュヌから [新しいボタン ] を遞択したす。
V. [マップ ボタン] ダむアログ ボックスの [アクション] フィヌルドで、[スクリプトの実行] アクション (関数) を遞択したす。
ボタンのキャプションを指定したす。 ボタンアむコンの色。 「OK」をクリックしお蚭定を終了したす。

スクリプトを䜿甚した SecureCRT ぞの入力の自動化

泚意

ボタン付きパネルは非垞に䟿利な機胜です。

1. 特定のセッションにログオンするずきに、デフォルトでこのタブにどのパネルを開くかを指定できたす。

2. 機噚の暙準アクションに事前定矩されたアクションを蚭定できたす: show show version、show running-config、saveconfiguration。

スクリプトを䜿甚した SecureCRT ぞの入力の自動化
これらのボタンにはスクリプトは添付されおいたせん。 アクションラむンのみ:

スクリプトを䜿甚した SecureCRT ぞの入力の自動化
蚭定 - セッションに切り替えるずきに、ボタンのある必芁なパネルがセッション蚭定で開きたす。

スクリプトを䜿甚した SecureCRT ぞの入力の自動化
顧客がログむン甚に個別のスクリプトを蚭定し、ベンダヌに察しお頻繁にコマンドを実行するパネルにアクセスするこずは理にかなっおいたす。

スクリプトを䜿甚した SecureCRT ぞの入力の自動化
Go Cisco ボタンを抌すず、パネルが Cisco ボタン バヌに切り替わりたす。

スクリプトを䜿甚した SecureCRT ぞの入力の自動化

単玔なスクリプトず高床なスクリプトの䜿甚䟋。 実生掻から緎習しおください。

ほずんどすべおの堎合には、単玔なスクリプトで十分です。 しかし、䜜業をスピヌドアップするために、スクリプトを少し耇雑にする必芁があったこずがありたす。 この耇雑化では、ダむアログ ボックスでナヌザヌに远加デヌタを芁求するだけでした。

ダむアログボックスを䜿甚しおナヌザヌにデヌタを芁求する

デヌタ芁求スクリプトには 2 がありたしたが、これはホスト名ず IP アドレスの 4 番目のオクテットです。 このアクションを実行するには、その方法を Google で怜玢したずころ、SecureCRT (vandyke) の公匏 Web サむトで芋぀かりたした。 - この機胜はプロンプトず呌ばれたす。

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

スクリプトを䜿甚しおナヌザヌ名/パスワヌドを入力する

ある顧客では、ネットワヌク機噚ぞの盎接アクセスが閉鎖されたした。 最初にデフォルトゲヌトりェむに接続し、そこからそれに接続されおいる機噚に接続するこずで機噚に䟵入するこずができたした。 接続には、IOS/ハヌドりェア ゜フトりェアに組み蟌たれおいる 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("snmpadminr")
	crt.Screen.WaitForString("assword:")
	crt.Screen.Send("Passwordr")
	crt.Screen.Synchronous = False
main()

泚: スクリプトは 2 ぀あり、XNUMX ぀は管理者アカりント甚、もう XNUMX ぀は 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 を入力した埌に衚瀺されたした。

結論

スクリプトを䜜成しお実行するずきは、次のルヌルに埓う必芁がありたす。スクリプトの䜜成ず実行にかかる時間は、理論䞊、同じ䜜業を手動で行うのにかかる時間 (メモ垳からのコピヌ/ペヌスト、曞き蟌みずデバッグ) を超えおはなりたせん。 Ansible、Python スクリプトの䜜成ずデバッグ甚のプレむブック)。 ぀たり、スクリプトの䜿甚により時間を節玄する必芁があり、プロセスの XNUMX 回限りの自動化に時間を無駄にする必芁はありたせん (぀たり、スクリプトが䞀意であり、それ以䞊繰り返す必芁がない堎合)。 ただし、スクリプトが独自であり、スクリプトによる自動化ずスクリプトの䜜成/デバッグに他の方法 (Ansible、コマンド りィンドり) で実行するよりも時間がかからない堎合は、スクリプトが最適な゜リュヌションです。
スクリプトのデバッグ。 スクリプトは埐々に倧きくなり、XNUMX 台目、XNUMX 台目、XNUMX 台目のデバむスでの実行時にデバッグが行われ、XNUMX 台目たでにスクリプトが完党に動䜜できるようになる可胜性が高くなりたす。

通垞、マりスを䜿甚しおスクリプトを実行する (ナヌザヌ名ずパスワヌドを入力する) 方が、メモ垳からナヌザヌ名ずパスワヌドをコピヌするよりも高速です。 しかし、セキュリティの芳点からは安党ではありたせん。
スクリプトを䜿甚する堎合の別の (実際の) 䟋: ネットワヌク機噚に盎接アクセスできたせん。 ただし、すべおのネットワヌク機噚を蚭定する必芁がありたす (監芖システムに導入し、远加のナヌザヌ名/パスワヌド/snmpv3ナヌザヌ名/パスワヌドを蚭定したす)。 コア スむッチにアクセスするず、そこから他の機噚ぞの SSH が開かれたす。 なぜAnsibleを䜿えないのか。 - ネットワヌク機噚 (回線 vty 0 4、ナヌザヌむンタヌフェヌス vty 0 4) で蚱可される同時セッション数の制限に遭遇するため (別の質問は、同じ SSH ファヌストホップで Ansible で異なる機噚を起動する方法です)。

このスクリプトは、FTP 経由でのファむルのコピヌなど、長時間の操䜜の時間を短瞮したす。 コピヌが完了するず、スクリプトはすぐに動䜜を開始したす。 ナヌザヌはコピヌの終了を確認し、コピヌの終了を認識しおから、適切なコマンドを入力する必芁がありたす。 スクリプトは客芳的にはそれをより速く実行したす。

スクリプトは、倧量デヌタ配信ツヌル (コン゜ヌル) を䜿甚できない堎合に適甚できたす。 たたは、ホスト名、管理 IP アドレスなど、機噚のデヌタの䞀郚が固有である堎合。 あるいは、プログラムを曞いおデバッグする堎合、スクリプトの実行䞭に機噚から受信したデヌタを远加するよりも困難です。 ・各機噚がむンタヌネットプロバむダのIPアドレスを持぀堎合に、ルヌトを芏定するスクリプトの䟋。 私の同僚は、DMVPN スポヌク数が 3 を超えたずきにそのようなスクリプトを䜜成したした。DMVPN 蚭定を倉曎する必芁がありたした。

ケヌススタディ: コン゜ヌル ポヌトを䜿甚した新しいスむッチの初期蚭定の構成:

A. コン゜ヌル ケヌブルをデバむスに接続したした。
B. スクリプトを実行する
B. スクリプトの実行を埅機したした
D. コン゜ヌル ケヌブルを次のデバむスに接続したした。
E. スむッチが最埌のスむッチではない堎合は、ステップ B に進みたす。

スクリプトの䜜業の結果:

  • 初期パスワヌドは機噚に蚭定されおいたす。
  • ナヌザヌ名を入力したした
  • デバむスの䞀意の IP アドレスが入力されたす。

PS 操䜜を繰り返す必芁がありたした。 デフォルトの ssh が蚭定されおいないか無効になっおいるためです。 はい、これは私の間違いです。

䜿甚した゜ヌス。

1. スクリプトの䜜成に぀いお
2. スクリプトの䟋

付録 1: サンプル スクリプト。


ホスト名ず IP アドレスの 9600 ぀のク゚リを含む長いスクリプトの䟋。 これは、コン゜ヌル (XNUMX ボヌ) を介しお機噚を事前蚭定するために䜜成されたした。 たた、機噚をネットワヌクに接続する準備も行いたす。

# $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 ドルから (最䜎䟡栌は XNUMX 幎間の SecureCRT のみ)
公匏サむト
゜フトりェア ラむセンスは、サポヌト (曎新) 付きで䞀床賌入するず、そのラむセンスで゜フトりェアを無期限に䜿甚できたす。

Mac OS X および Windows オペレヌティング システムで動䜜したす。

スクリプトのサポヌトあり (この蚘事)
あり コマンドりィンドり
シリアル/Telnet/SSH1/SSH2/シェル オペレヌティング システム

出所 habr.com