Schlagwort-Archive: IOS

Cisco IOS: Terminal Server Menü

Terminal Server Menü

Wer schon mal ein schickes Terminal Server Menü auf einem Router haben wollte um an seinem LAB ohne lange Befehls Sequenzen auf die Oberfläche anderer Router kommen wollte, für den ist das hier genau das richtige.

Terminal Server Menü auf Cisco Router

Für den Aufbau eines Terminal Servers benötigt man neben einem Cisco Router mit Network-Modul Einschub einen passende Line-Card welche die Asynchronen seriellen Ports zur Verfügung stellt. In meinem Router habe ich dazu eine NM-16A= verbaut. Die gab es für billiges Geld im Internet beim Chinesen um die Ecke.

Die Serielle Karte

Nach dem Einbau der Karte und booten des Routers kann man das Modul per Software sehen.

TS#sh inventory
NAME: "Sixteen Port Low-Speed Async", DESCR: "Sixteen Port Low-Speed Async"
PID: NM-16A=           , VID: 0.1, SN: xxxxxxxx

Mit dem nächsten Befehl werden die Nummern der Lines ermittelt um nachher die richtige Zuordnung machen zu können.

TS#sh line
Tty Typ     Tx/Rx    A Modem  Roty AccO AccI   Uses   Noise  Overruns   Int
*     0 CTY              -    -      -    -    -      0       0     0/0       -
33 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
34 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
35 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
36 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
37 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
38 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
39 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
40 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
41 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
42 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
43 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
44 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
45 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
46 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
47 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
48 TTY   9600/9600  -    -      -    -    -      0       0     0/0       -
65 AUX   9600/9600  -    -      -    -    -      0       0     0/0       -
*    66 VTY              -    -      -    -    -      1       0     0/0       -
67 VTY              -    -      -    -    -      0       0     0/0       -
68 VTY              -    -      -    -    -      0       0     0/0       -
69 VTY              -    -      -    -    -      0       0     0/0       -
70 VTY              -    -      -    -    -      0       0     0/0       -
71 VTY              -    -      -    -    -      0       0     0/0       -
72 VTY              -    -      -    -    -      0       0     0/0       -
73 VTY              -    -      -    -    -      0       0     0/0       -
74 VTY              -    -      -    -    -      0       0     0/0       -
75 VTY              -    -      -    -    -      0       0     0/0       -
76 VTY              -    -      -    -    -      0       0     0/0       -
77 VTY              -    -      -    -    -      0       0     0/0       -
78 VTY              -    -      -    -    -      0       0     0/0       -
79 VTY              -    -      -    -    -      0       0     0/0       -
80 VTY              -    -      -    -    -      0       0     0/0       -
81 VTY              -    -      -    -    -      0       0     0/0       -

Line(s) not in async mode -or- with no hardware support:
1-32, 49-64

Hier sieht man schon das die Lines TTY 33 bis TTY 48 von der Line-Card sind und als asynchrone Ports dienen. Diese Nummern werden in einem der nächsten Schritte benötigt um eine Zuordnung von analogen Lines zu einer IP-Adresse herzustellen.

Konfiguration

Als erstes muss der Router aber mal eine IP-Adresse bekommen, die später von Außen erreichbar ist und an die die analogen Lines gebunden werden können. Da die IP-Adresse fest konfiguriert werden muss bietet es sich an dies an einem Loopback Interface zu binden.

!
interface Loopback0
ip address 172.16.1.1 255.255.255.255
!

Die verwendete IP-Adresse ist erst mal egal, da sie nur intern im Router verwendet wird und nicht zwingend von Außen sichtbar sein muss.

Nun werden die einzelnen TTY-Lines an die IP-Adresse vom Loopback-Interface gebunden. Die TCP-Ports errechnen sich aus der Zahl 2000 + der Line Nummer. Für den Host R1 also 2000 + Line 33 = 2033.

ip host R1 2033 172.16.1.1
ip host R2 2034 172.16.1.1
ip host R3 2035 172.16.1.1
ip host R4 2036 172.16.1.1
ip host R5 2037 172.16.1.1
ip host R6 2038 172.16.1.1
ip host SW1 2039 172.16.1.1
ip host SW2 2040 172.16.1.1
ip host SW3 2041 172.16.1.1
ip host SW4 2042 172.16.1.1
ip host BB1 2043 172.16.1.1
ip host BB2 2044 172.16.1.1
ip host BB3 2045 172.16.1.1
ip host PDU 2046 172.16.1.1

Damit ist der Router R1 per Telnet IP 172.16.1.1 Port 2033 erreichbar.

TS#telnet 172.16.1.1 2033
Trying 172.16.1.1, 2033 ... Open
R1>


Soweit funktioniert der Verbindungsaufbau und der angeschlossene Router R1 ist erreichbar. Mit der Tastenkombination <Strg>-<Umschalt>-6 x wird die Verbindung abgebrochen und der Promt kehrt wieder zum Terminal Server zurück.

Kommen wir nun zum Aufbau des Menüs. Dieser gliedert sich auf in Titel, Text und Kommandos.

Das Menü

Als erstes der Menü Titel:

!
menu TS title ^
********************************************************************
CCIE Lab Terminal Server from Carsten Ellermann
To exit from a device, use CTRL+SHIFT+6 then press x
********************************************************************
^
!

Dann folgen die Menü-Einträge:

!
menu TS text 1 R1  - 2651XM         9          SW3 - 3560
menu TS text 2 R2  - 2651XM        10          SW4 - 3560
menu TS text 3 R3  - 2651XM        11          BB1 - 2651XM
menu TS text 4 R4  - 2811          12          BB2 - 2621
menu TS text 5 R5  - 2801          13          BB3 - 2611
menu TS text 6 R6  - 2801          14          PDU - Power unit
menu TS text 7 SW1 - 3550          15          empty
menu TS text 8 SW2 - 3550          16          empty
menu TS text s show all established sessions
menu TS text c<no> clear the session by number ie: c7
menu TS text e menu-exit
menu TS text q Quit terminal server session
menu TS prompt ^ Your selection : ^
!


Und nun noch die dazu gehörenden Kommandos:

!
menu TS command 1 resume R1 /connect telnet R1
menu TS command 2 resume R2 /connect telnet R2
menu TS command 3 resume R3 /connect telnet R3
menu TS command 4 resume R4 /connect telnet R4
menu TS command 5 resume R5 /connect telnet R5
menu TS command 6 resume R6 /connect telnet R6
menu TS command 7 resume SW1 /connect telnet SW1
menu TS command 8 resume SW2 /connect telnet SW2
menu TS command 9 resume SW3 /connect telnet SW3
menu TS command 10 resume SW4 /connect telnet SW4
menu TS command 11 resume BB1 /connect telnet BB1
menu TS command 12 resume BB2 /connect telnet BB2
menu TS command 13 resume BB3 /connect telnet BB3
menu TS command 14 resume PDU /connect telnet PDU
menu TS command s show sessions
menu TS options s pause
menu TS command e menu-exit
menu TS command q exit
!

Zusätzlich werden noch ein paar Kommandos benötigt um eine bestehende Verbindung zu einem Router wieder zu trennen:

!
menu TS command c1 c1
menu TS command c2 c2
menu TS command c3 c3
menu TS command c4 c4
menu TS command c5 c5
menu TS command c6 c6
menu TS command c7 c7
menu TS command c8 c8
menu TS command c9 c9
menu TS command c10 c10
menu TS command c11 c11
menu TS command c12 c12
menu TS command c13 c13
menu TS command c14 c14
!

Aliase

Damit diese Kommandos funktionieren müssen noch ein paar Aliase definiert werden:

!
alias exec c1 disconnect R1
alias exec c2 disconnect R2
alias exec c3 disconnect R3
alias exec c4 disconnect R4
alias exec c5 disconnect R5
alias exec c6 disconnect R6
alias exec c7 disconnect SW1
alias exec c8 disconnect SW2
alias exec c9 disconnect SW3
alias exec c10 disconnect SW4
alias exec c11 disconnect BB1
alias exec c12 disconnect BB2
alias exec c13 disconnect BB3
alias exec c14 disconnect PDU
!

Damit nachher alles schön aussieht wird der Bildschirm noch einmal gelöscht bevor das Menü aufgebaut wird:

!
menu TS clear-screen
menu TS line-mode
!

Die 16 asynchronen Lines werden auch noch konfiguriert:

!
line 33 48
exec-timeout 0 0
logging synchronous
no exec
transport input telnet
transport output none
!

Die Lines

Zum Schluss fehlen jetzt noch die VTY Lines mit denen man Remote auf den Terminal Server zugreifen kann. Hier gibt es ein paar Punkte zu beachten:

  1. Das erstellte Menü wird mit dem Befehl autocommand menu TS automatisch ausgeführt, sobald eine Verbindung zum Terminal Server besteht.
  2. Mit dem Befehl transport input telnet ssh besteht die Möglichkeit sich per Telnet oder SSH auf dem Terminal Server einzuloggen.
  3. Der Befehl transport output telnet ist notwendig wenn die eingehende Verbindung per SSH aufgebaut wurde. Hier findet dann eine Protokoll Konvertierung von SSH nach Telnet statt und dafür muss es der Line gestattet werden ausgehend Telnet zu nutzen.
  4. Beim Router werden normal nur die VTY Lines 0 – 4 angelegt. Ich benutze zusätzlich noch die VTY Lines 5 – 15, damit ich später zu jedem angeschlossenen Gerät gleichzeitig eine Verbindung offen halten kann.
  5. Der Login auf den Terminal Server wird wegen login local mit der lokalen Benutzer Datenbank abgeglichen. Dazu muss dann auf dem Router noch ein lokaler Benutzer definiert werden für den aber das Privileg 1 ausreicht. Siehe hierzu auch den Link.

Damit ist das komplette Menü erstellt und lässt sich von nun an benutzen.

!
line vty 0 4
exec-timeout 0 0
logging synchronous
login local
autocommand  menu TS
transport input telnet ssh
transport output telnet
line vty 5 15
exec-timeout 0 0
logging synchronous
login local
autocommand  menu TS
transport input telnet ssh
transport output telnet
!

Für Anregungen und Hinweise bin ich sehr dankbar.

 

Cisco IOS: „sicheres“ Passwort mittels EEM neu vergeben

Passwort generieren

Wer schon mal nach einer Lösung gesucht hat um auf einem Cisco Router zu einem Username automatisiert ein neues zu vergeben kann mal den Code ausprobieren. Das kann interessant sein um bei einem Test Gerät oder Terminal Server regelmäßig ein neues Passwort zu bekommen.
Für die unter Euch die sich einen TS mit einem alten Router aufbauen wollen sei noch erwähnt das die Befehle erst ab IOS 12.4(22)T funktionieren.

Da Cisco im IOS keine Random-Funktion eingebaut hat wird es schwierig an zufällige Zeichen zu kommen. Ich habe mich dazu entschieden eine Zeichenfolge aus einer MD5 Zeichenkette zu benutzen. Dazu habe ich einen Benutzer ‚ccierack‘ angelegt mit dem Befehl

username ccierack secret 0 <irgend ein Passwort>

Bei einem „show run“ sieht das nachher so aus:

username ccierack secret 5 $1$32nv$VwvdXY4bFIQl.xD2SWYoP1

Nun muss man nur noch ein paar Zeichen auswählen (z.B. Zeichen 32 – 39) und damit ein neues Passwort eintragen.

Zeit gesteuert

Das neue Passwort wird dann per Mail an den Empfänger gesendet und ist sofort gültig. Als Zeitsteuerung habe ich einen Cron-Eintrag gebaut, der jeden Samstag um 12:00 Uhr das Passwort neu setzt.

event manager applet userpass
event timer cron cron-entry "0 12 * * 6"
action 0.1 set mailsrv "<SMTP-Server-IP>"
action 0.2 set sender "<cisco-ts@Deine-Domain.de>"
action 0.3 set receiver "<Empfaenger@Deine-Domain.de>"
action 0.4 set mailsubject "Neues PW fuer den Cisco Terminal Server"
action 1.1 cli command "enable"
action 1.2 cli command "sh run | inc ccierack"
action 1.3 set result "$_cli_result"
action 1.4 string range "$result" 32 39
action 1.5 set newpw "$_string_result"
action 2.1 cli command "conf t"
action 2.2 cli command "username ccierack secret 0 $newpw"
action 2.3 cli command "end"
action 3.1 syslog msg "New Password for user 'ccierack' is '$newpw'."
action 3.2 mail server "$mailsrv" to "$receiver" from "$sender" subject "$mailsubject" body " Das neue Passwort fuer den Benuter 'ccierack' lautet '$newpw'. Alles ohne ''!"

 

Die Mail sieht dann etwa so aus:

Das neue Passwort fuer den Benuter 'ccierack' lautet 'Px$T9Xfo'. Alles ohne ''!

Viel Spaß beim Ausprobieren und Erweitern.