fenris14
Goto Top

Cisco SG Config per SCP

Hallo,

habe mal eine kurze Frage: Ich versuche per SCP die Startup-Config von einen Cisco SG350X und SG250 zu sichern. Bisher wurde das manuell gemacht. Bei den Brocade Foundry Geräten war das ganz einfach:

  • Public Key File auf das Gerät laden
  • scp user@ip:startConfig .

Fertig. Das funktioniert wunderbar. Laut einigen Einträgen in der Doku von Cisco und in deren Foren, soll das auf ähnliche Weise funktionieren:

scp user@ip:startup-config test.txt

auch habe ich die Angabe des kompletten Pfades probiert:

scp user@ip:system/configuration/startup-config test.txt

Es kommt immer der Fehler:

subsystem request failed on channel 0
scp: Connection closed

Authentifizierung per Public Key geht ohne Probleme. Weiß jemand woran das liegt? Geht der beschriebene Weg nur für Catalysten oder gibt es noch eine extra Funktion? Zur Not muss ich es mit Remote-Command per SSH machen, aber das er fordert wieder das ich einen Login per Public-Key auf das Backup zulasse, was nicht so optimal ist.

Gruß

Content-ID: 41561723390

Url: https://administrator.de/contentid/41561723390

Ausgedruckt am: 24.11.2024 um 02:11 Uhr

aqui
aqui 15.03.2024 um 16:29:59 Uhr
Goto Top
Der User muss zwingend den Privilige Level 15 haben sonst klappt es nicht mit Flash Zugriffen.
Lesenwert dazu:
Cisco IOS SCP Verbindung wird geschlossen
Fenris14
Fenris14 15.03.2024 um 17:14:53 Uhr
Goto Top
Das habe ich bereits überprüft und der entsprechende User hat bereits Priv Level 15. Mit Verbose kommt leider auch nicht mehr zu Tage:

debug1: Offering public key: /home/admin/.ssh/id_rsa RSA
debug1: Server accepts key: /home/admin/.ssh/id_rsa RSA 
Authenticated to sw4 ([sw4]:22) using "publickey".  
debug1: channel 0: new session [client-session] (inactive timeout: 0)
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: filesystem
debug1: Sending environment.
debug1: channel 0: setting env LANG = "C"  
debug1: Sending subsystem: sftp
subsystem request failed on channel 0
scp: Connection closed

Kann es eventuell sein das der Pfad falsch angegeben wird? Habe jetzt verschiedene Konstellationen getestet, aber keinen Erfolg.
aqui
aqui 15.03.2024 um 17:23:54 Uhr
Goto Top
Mmmhhh "sftp" ist aber nicht scp!! Das sind 2 verschiedene Baustellen.
Ich teste das hier mal mit einem SG300 einen X hab ich leider nicht zur Hand im Moment.
Fenris14
Fenris14 15.03.2024 um 17:37:23 Uhr
Goto Top
Das wäre ja die Erklärung. Vielleicht kann er einfach kein SCP. Wobei mich das wundern würde. Mit SFTP bekomme ich aber den selben Fehler präsentiert.
Fenris14
Fenris14 15.03.2024 um 17:46:13 Uhr
Goto Top
Wenn ich die Option -O verwende, dann bekomme ich schon mal eine andere Fehlermeldung. Wobei diese noch weniger Sinn ergibt. In der Session Table vom SSH oder generell auch am Web-Interface sind keine weiteren Logins zu sehen.

Received disconnect from sw4 port 22:2:
 A client is already connected

Disconnected from sw4 port 22
aqui
aqui 15.03.2024 aktualisiert um 17:51:50 Uhr
Goto Top
Zumindestens die Catalysten können SFTP. Bei den SG Modellen müsste ich mal ins Datenbaltt sehen da bin ich nicht sicher.
https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst9300/software ...
sind keine weiteren Logins zu sehen.
Und auch wenn. Der Switch supportet ja mehr als eine SSH Session zugleich. 🤔 Ich forsche mal...
aqui
aqui 16.03.2024 aktualisiert um 10:13:05 Uhr
Goto Top
Zumindestens VOM SG300 auf einen Debian Bookworm Host kopiert der Switch per SCP:
sg300-switch#copy running-config scp://user1:geheim123@10.99.1.147/test.txt
.!.!.!.!.!.!.!.!!
Copy: 20886 bytes copied in 00:00:29 [hh:mm:ss]

sg300-switch#$py running-config scp://user1:geheim123@10.99.1.147/test2.txt exclude 
...!
Copy: 3987 bytes copied in 00:00:15 [hh:mm:ss]

user1@debiansrv:~# ls -l
total 63176
-rw-r--r-- 1 root root     3987 Mar 16 09:53 test2.txt
-rw-r--r-- 1 root root    20886 Mar 16 09:52 test.txt 

Der SG300 (Latest SW version 1.4.11.5) kann aber nur diffie-hellman-group1-sha1 so das man bei einem unixoiden Host zwingend im Verzeichnis /etc/ssh/sshd_config noch eine Konfig Datei <name>.conf erstellen muss die diesen Algorithmus erlaubt. In den aktuellen OS ist er deaktiviert.
Die Datei hat dann folgenden Inhalt:
KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group14-sha1 
Sie erlaubt damit group1 und group14 Zugänge auf den Server.

Nun kommt die andere Richtung AUF den Switch. Ob die mit den SG Modellen erlaubt ist sagen die Handbücher und Knowledgebases nicht explizit:
https://www.cisco.com/c/en/us/support/docs/smb/switches/cisco-small-busi ...
Fenris14
Fenris14 19.03.2024 um 12:33:48 Uhr
Goto Top
Der Link beschreibt auch nur das Verfahren ÜBER den Switch. Also kein Remote-Download. Es scheint mir so als könnten die SG-Modelle das nicht. Habe auch nichts anderes gefunden. Die Catalyten können es.

Dann muss ich es mit SSH Remote Command machen. Schade. Leider Sicherheitstechnisch auch nicht ganz optimal, weil wenn ich den Befehl mit Passwort auf dem Switch abfeuer, dann ist das ja in der Command History ersichtlich. Per Public Key wäre das natürlich schön. Aber vom Switch zu einem entfernten Rechner scheint Public Key auch nicht zu funktionieren. Ich kann zwar den Key von einer anderen Maschine hochladen, dann kann diese sich ohne Passwort einloggen, aber andersherum funktioniert es über den Aufruf von SCP nicht.
aqui
aqui 19.03.2024 aktualisiert um 13:36:36 Uhr
Goto Top
Das grundlegende Problem mit dem SCP Copy ist übrigens umfassend gelöst:
Mit SCP Dateien vom und zu Cisco IOS kopieren

Es klappt damit auch fehlerfrei auf den SG und CBS Modellen allerdings muss man bei den SGs aufpassen da die, wie oben schon gesagt, nur Group1 und SHA1 supporten.
Dort muss also immer ein:
KexAlgorithms +diffie-hellman-group14-sha1,diffie-hellman-group1-sha1                           
HostkeyAlgorithms +ssh-rsa 
in die entsprechende Konfig Datei des SSH Gegenübers das es klappt!

Damit ist aber bei den SG und CBS Modellen nur ein Kopieren VOM Switch ZU einem SCP Endgerät möglich. Anders als bei den Catalyst Modellen ist die andere Richtung und auch der Zugang mit Keys nicht beschrieben und es fehlt ja auch ein entsprechendes Zieldevice bzw. Verzeichnis dort.
Und ja, mit dem Passwort ist weniger schön. Da man den Key bie SG u. CBS nicht angeben kann ist in der Tat fraglich ob das supportet ist. Müsste man ggf. mal testen.
Fenris14
Fenris14 19.03.2024 aktualisiert um 14:50:01 Uhr
Goto Top
Ja, wenn ich etwas hinkopiere. Das ist ja nicht das was mich interessiert. Aber wenn ich andersherum eine Datei Remote von Switch initiert auf dem PC per SCP eine Datei kopieren will, geht das nicht. Da sagt er derzeit:

scp -O -o HostKeyAlgorithms=+ssh-rsa admin@sw4:startup-config test.txt
Received disconnect from sw4 port 22:2:
 A client is already connected

Disconnected from sw4 port 22

Dann geht es erstmal nur per Remote-Anweisung per SSH und man muss damit leben das das Passwort dort angezeigt wird.

Edit: Angabe einer Keyfile um sich vom Cisco SG mit einem Pubkey zu authentifizieren geht im übrigen auch nicht. Es gibt dafür keine Option. Also geht es nur mit Plaintext-PW im Script. Pfad-Angabe btw ebenfalls nicht möglich. Die Datei kann nur plump ins Hauptverzeichnis des Users kopiert werden.

Da lobe ich mir meine Brocades mit Ironfast.
aqui
aqui 19.03.2024 aktualisiert um 15:18:27 Uhr
Goto Top
Ja, wenn ich etwas hinkopiere.
Das ist eine interessante Variante oben VON extern quasi beim Switch eine Konfig per SCP abholen ohne das das auf dem CLI initiiert wurde.
Die Frage ist dann was er mit dem "A client is already connected" jetzt meint?
Falls du mit einem SSH Client schon irgendwie connected ist und er keine weitere SSH Session mehr erlaubt. Gut, könnte man checken wenn man alternativ mal per Telnet drauf geht oder eben gar keine CLI Session nebenbei und nackt nur SCP.
Oder das er einen von außen initiierten SCP Befehl nicht mag und das nur lokal vom eigenen CLI erlaubt?

Frage ist auch was genau den obigen "Disconnect" auslöst? Das solltest du übrigens sehen wenn du einmal den Verbose Level etwas hochschraubst bei deinem Kommando also:
scp -vvv -O -o HostKeyAlgorithms=+ssh-rsa admin@sw4:startup-config test.txt
Da lobe ich mir meine Brocades mit Ironfast.
👍 Deine Ruckus ICX können das aber auch! 😉
Fenris14
Fenris14 19.03.2024 um 15:18:31 Uhr
Goto Top
Doppelte SSH-Sessions sind ebenfalls nicht möglich. Wenn ich ein Remote Command mache, dann sagt er ebenfalls das bereits ein User verbunden ist. Zum Beispiel per:

ssh -o HostKeyAlgorithms=+ssh-rsa admin@sw4 'copy running-config scp://admin:password@10.255.1.1:/test111.txt; exit'  
aqui
aqui 19.03.2024 aktualisiert um 15:25:32 Uhr
Goto Top
Ob er sowas wie remote File Operations dann auch ganz ohne eine Authentisierung ausführt ist zweifelhaft. Das SSH Kommando müsste er mit einem Passwort prompt beantworten. Key geht ja nicht. Das dürfte allein schon aus Sicherheitsgründen nicht gehen. Catalysten erfordern dafür einen AAA Eintrag der den exec Level erlaubt. Sowas gibt es beim SG/CBS gar nicht.
Führt er denn ein lokales "copy running-config scp:admin:password@10.255.1.1:/test111.txt"// vom CLI aus?
Fenris14
Fenris14 19.03.2024 um 15:35:11 Uhr
Goto Top
Ja, wenn ich das lokal mache oder über SSH direkt eingeloggt bin auf der Kiste, funktioniert das ohne Probleme. Ich will das Backup automatisieren deshalb wäre es natürlich von Vorteil wenn ich irgendwo ansetzen kann um das Backup auszulösen.

Es gibt ja auf diesen Büchsen auf keine Möglichkeit ein zeitgesteuert ein Backup geschweige denn einen Befehl auszuführen. So muss ich mich manuell auch noch auf die Kisten einloggen und den Befehl abfeuern.
Fenris14
Fenris14 19.03.2024 um 16:01:16 Uhr
Goto Top
Alles was ich jetzt gesehen und was ich im Cisco Forum gelesen, scheint es mir so, das hier bewusst keine Möglichkeit gibt eine Art Automatisierung für Backups durchzuführen. Das SSH Remote Command wie oben beschrieben, wird geblockt, weil generell nur ein SSH Session auf dem Device ausgeführt werden kann. Durch das Verbinden und den Befehl absetzen, hat man schon eine Verbindung und die SCP-Übertragung wäre eine weitere. Aber auch tftp per Remote Aufruf funktioniert nicht, weil scheinbar SSH dabei mehrere Sessions parallel erzeugt.

Alles in Allem totaler Quark. Bei den Ruckus oder alten Brocade, geht das einwandfrei mit SCP direkt vom Zielrechner aus.
aqui
Lösung aqui 19.03.2024 aktualisiert um 16:05:15 Uhr
Goto Top
Gut, das könnte man aber auch sehr einfach automatisiert machen mit Perl oder Expect über das CLI. Da gibts im Internet zig Code Schnipsel für und das klappt immer auch für SG und CBS.
https://kloudvm.medium.com/how-to-automate-backup-of-cisco-switches-usin ...
https://www.oreilly.com/library/view/cisco-ios-cookbook/0596527225/ch01s ...

Ich meine eine Konfig Sicherung kann man auch per SNMP triggern aber da stellt sich wieder die Frage ob das die SG/CBS über ihre MIB können.
https://community.cisco.com/t5/xr-os-and-platforms/snmp-configuration-ba ...
https://ccie20728.wordpress.com/2008/05/20/get-the-cisco-configuration-o ...
https://www.ciscozine.com/how-to-save-configurations-using-snmp/
Usw.
Fenris14
Fenris14 20.03.2024 um 14:40:29 Uhr
Goto Top
Mit Except konnte ich es jetzt mal zum Laufen bringen. Damit funktioniert es. Perl will ich mir gar nicht erst ansehen, ein weitere Script-Sprache vertrage ich in dieser Dekade nicht mehr.

Zumindest klappt erstmal die Sicherung der SG300 und SG350X.

Jetzt habe ich noch ein Problem mit den SG200er und SG250er. Die haben kein SSH. Habe es per Curl probiert, da lande ich trotz gespeicherter Cookies immer wieder auf der Logout-Seite. SNMP geht auch nicht, weil eine bestimmte MIB fehlt. Oxidized geht ebenfalls nicht, weil dafür wiederum SSH gebraucht wird.
aqui
aqui 21.03.2024 aktualisiert um 10:29:24 Uhr
Goto Top
Mit Except konnte ich es jetzt mal zum Laufen bringen.
"Expect" meintest du sicher, oder?
Kannst du das Script mal posten sofern es nicht geheim ist? Könnte ich an den SGs hier auch verwursten ohne das Rad neu erfinden zu müssen. 😉
Problem mit den SG200er und SG250er. Die haben kein SSH
Oha, da hast du aber gestern deine 👓 nicht aufgehabt, oder?? 🤓 (Menüpunkt "Security"!)
sg250

Der SG200 supportet zumindestens Telnet so das dein Expect Script auch bei beiden laufen sollte. (SG200 via Telnet) Ganz sicher aber auf dem SG250!
Fenris14
Fenris14 22.03.2024 aktualisiert um 14:45:00 Uhr
Goto Top
Bei den SG250 könntest du recht haben. Da scheint der SSH-Support erst mit späteren Updates nachgereicht worden zu sein. Da muss ich die Firmware flashen.

Bei allen SG200er sieht es so aus:

screenshot 2024-03-22 143859

Letzte Firmware aktiv. Da geht auch kein Telnet.
Fenris14
Fenris14 22.03.2024 um 14:58:27 Uhr
Goto Top
Quick&Dirty:

#!/usr/bin/expect

set timeout 40

foreach a [list "sw3" "sw4" ] {  
        spawn ssh -o HostKeyAlgorithms=+ssh-rsa -i /home/admin/.ssh/id_rsa admin@$a
        expect "#" { send "copy startup-config scp://admin:password@10.10.0.1/$a.txt\r\r" }  
        expect "#" { send "exit\r" }  
}

Der Rest wird dann von einem anderen Bash-Script erledigt. Der kopiert die Dateien die dann im Home-Verzeichnis des Users liegen, in bestimmte Verzeichnisse.
aqui
aqui 22.03.2024 aktualisiert um 17:27:16 Uhr
Goto Top
Danke! 👍

Meine Keys sind mit einem Passwort gesichert ich vermute dann muss ich da noch ein
expect "ssword:"
send "********\r"
sleep 3 
nach dem spawn Kommando einfügen?! 🤔

Kosmetisch könnte man sich dann auch das "-o HostKeyAlgorithms=+ssh-rsa" noch ersparen wenn man im Homeverzeichnis von mlowadmin in der config Datei im Verzeichnis .ssh noch ein
Host sw3 sw4
    KexAlgorithms +diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
    HostkeyAlgorithms +ssh-rsa 
hinzufügt. 😉
aqui
aqui 08.04.2024 um 15:53:28 Uhr
Goto Top
Dann kannst du ja eigentlich schliessen, oder?!
Wie kann ich einen Beitrag als gelöst markieren?