poe.sh: Regression bei ArubaOS-Manager-Accounts zurückgesetzt
disable_poe()/enable_poe() waren waehrend dieser Sitzung um explizite
'timeout { exit 1 }'/'eof { exit 1 }'-Abbrueche 'gehaertet' worden, um
echte SSH-/Kommando-Fehlschlaege vom Aufrufer unterscheidbar zu machen.
Live an Switch 'ST-2000-Sued' (Aruba JL322A 2930M) reproduziert: das
dafuer verwendete Login-Prompt-Pattern -re ".*> $" matcht nur einen
Operator-Prompt ("switchname>"). Landet der SSH-Account (hier: admin)
nach dem Login mit Manager-Rechten direkt im privilegierten Modus
("switchname#"), matcht das Pattern nie -> 5s-Timeout -> exit 1,
obwohl Passwort und Verbindung tatsaechlich in Ordnung waren. Jeder
manuelle wie automatische PoE-Neustart ueber einen Manager-Account
schlug dadurch fehl.
disable_poe()/enable_poe() sind jetzt wieder exakt auf den Stand der
urspruenglichen, in Produktion ueber Jahre bewaehrten Fassung
zurueckgesetzt (keine expliziten timeout/eof-Abbrueche, kein
abschliessendes exit 0) -- nur der Kommentar wurde aktualisiert, um
diesen Vorfall zu dokumentieren.
This commit is contained in:
+21
-40
@@ -29,16 +29,21 @@ END
|
|||||||
|
|
||||||
SLEEP=${SLEEP:-300}
|
SLEEP=${SLEEP:-300}
|
||||||
|
|
||||||
# disable_poe()/enable_poe() geben jetzt den TATSÄCHLICHEN Erfolg als
|
# disable_poe()/enable_poe(): bewusst OHNE expliziten "timeout { exit 1 }"/
|
||||||
# Exit-Code zurück (0 = Switch erreicht UND Kommando bestätigt, 1 =
|
# "eof { exit 1 }"-Abbruch in den einzelnen expect-Schritten -- ein nicht
|
||||||
# fehlgeschlagen), statt blind anzunehmen, dass ein SSH-Verbindungsversuch
|
# matchender Schritt laesst expect nach Ablauf von "set timeout 5" einfach
|
||||||
# immer klappt. Jeder kritische expect-Schritt (Verbindungsaufbau,
|
# zur naechsten Zeile weiterlaufen, statt abzubrechen. Das ist absichtlich
|
||||||
# configure-terminal-Prompt, Interface-Prompt, Bestätigung des
|
# so belassen: ein Versuch, hier "echte" Fehlererkennung nachzuruesten
|
||||||
# power-over-ethernet-Kommandos) hat dafür einen eigenen timeout-Zweig,
|
# (Exit-Code 0 nur bei bestaetigtem Erfolg je Schritt), hat sich live als
|
||||||
# der explizit mit "exit 1" abbricht -- vorher lief das expect-Skript bei
|
# Regression herausgestellt. Grund: das Login-Prompt-Pattern
|
||||||
# einem unerreichbaren Switch einfach durch alle Timeouts durch und endete
|
# "-re ".*> $"" unten matcht nur ein Operator-Prompt ("switchname>"). Auf
|
||||||
# trotzdem mit Exit-Code 0, wodurch der Aufrufer fälschlich "PoE
|
# ArubaOS-Switches, bei denen der SSH-Account (z.B. "admin") mit
|
||||||
# deaktiviert/aktiviert" geloggt hat, obwohl am Switch nichts passiert war.
|
# Manager-Rechten direkt im privilegierten Modus landet ("switchname#"
|
||||||
|
# statt "switchname>", bestaetigt an einem 2930M/"ST-2000-Sued"), matcht
|
||||||
|
# das Pattern nie -- mit einem harten Timeout-Abbruch waere das faelschlich
|
||||||
|
# als Fehlschlag gewertet worden, obwohl Passwort und Verbindung in
|
||||||
|
# Ordnung waren. Diese Funktionen hier sind daher wieder exakt auf den
|
||||||
|
# Stand der urspruenglichen, in Produktion bewaehrten Fassung zurueckgesetzt.
|
||||||
function disable_poe() {
|
function disable_poe() {
|
||||||
local switch_ip=$1
|
local switch_ip=$1
|
||||||
local switch_port=$2
|
local switch_port=$2
|
||||||
@@ -52,24 +57,13 @@ expect {
|
|||||||
"assword:" { send "$password\r"; exp_continue }
|
"assword:" { send "$password\r"; exp_continue }
|
||||||
"Press any key" { send "\r"; exp_continue }
|
"Press any key" { send "\r"; exp_continue }
|
||||||
-re ".*> $" { }
|
-re ".*> $" { }
|
||||||
timeout { exit 1 }
|
|
||||||
eof { exit 1 }
|
|
||||||
}
|
}
|
||||||
send "configure terminal\r"
|
send "configure terminal\r"
|
||||||
expect {
|
expect "(config)#"
|
||||||
"(config)#" { }
|
|
||||||
timeout { exit 1 }
|
|
||||||
}
|
|
||||||
send "interface $switch_port\r"
|
send "interface $switch_port\r"
|
||||||
expect {
|
expect "(eth-$switch_port)#"
|
||||||
"(eth-$switch_port)#" { }
|
|
||||||
timeout { exit 1 }
|
|
||||||
}
|
|
||||||
send "no power-over-ethernet\r"
|
send "no power-over-ethernet\r"
|
||||||
expect {
|
expect "(eth-$switch_port)#"
|
||||||
"(eth-$switch_port)#" { }
|
|
||||||
timeout { exit 1 }
|
|
||||||
}
|
|
||||||
send "exit\r"
|
send "exit\r"
|
||||||
expect "(config)#"
|
expect "(config)#"
|
||||||
send "exit\r"
|
send "exit\r"
|
||||||
@@ -78,7 +72,6 @@ send "exit\r"
|
|||||||
expect ">"; send "exit\r"
|
expect ">"; send "exit\r"
|
||||||
expect "Do you want to log out (y/n)?" { send "y\r" }
|
expect "Do you want to log out (y/n)?" { send "y\r" }
|
||||||
expect eof
|
expect eof
|
||||||
exit 0
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,24 +88,13 @@ expect {
|
|||||||
"assword:" { send "$password\r"; exp_continue }
|
"assword:" { send "$password\r"; exp_continue }
|
||||||
"Press any key" { send "\r"; exp_continue }
|
"Press any key" { send "\r"; exp_continue }
|
||||||
-re ".*> $" { }
|
-re ".*> $" { }
|
||||||
timeout { exit 1 }
|
|
||||||
eof { exit 1 }
|
|
||||||
}
|
}
|
||||||
send "configure terminal\r"
|
send "configure terminal\r"
|
||||||
expect {
|
expect "(config)#"
|
||||||
"(config)#" { }
|
|
||||||
timeout { exit 1 }
|
|
||||||
}
|
|
||||||
send "interface $switch_port\r"
|
send "interface $switch_port\r"
|
||||||
expect {
|
expect "(eth-$switch_port)#"
|
||||||
"(eth-$switch_port)#" { }
|
|
||||||
timeout { exit 1 }
|
|
||||||
}
|
|
||||||
send "power-over-ethernet\r"
|
send "power-over-ethernet\r"
|
||||||
expect {
|
expect "(eth-$switch_port)#"
|
||||||
"(eth-$switch_port)#" { }
|
|
||||||
timeout { exit 1 }
|
|
||||||
}
|
|
||||||
send "exit\r"
|
send "exit\r"
|
||||||
expect "(config)#"
|
expect "(config)#"
|
||||||
send "exit\r"
|
send "exit\r"
|
||||||
@@ -121,7 +103,6 @@ send "exit\r"
|
|||||||
expect ">"; send "exit\r"
|
expect ">"; send "exit\r"
|
||||||
expect "Do you want to log out (y/n)?" { send "y\r" }
|
expect "Do you want to log out (y/n)?" { send "y\r" }
|
||||||
expect eof
|
expect eof
|
||||||
exit 0
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user