darkzonesd
Goto Top

Plink schneidet Befehle ab

Moin Gemeinde,

ich versuche gerade über Plink ein paar Scripte aus für switch configs und habe momentan leider ein Problem. Ich führe über ein C# Programm den Befehl:
.\\plink.exe {SWusername}@{txtIPAdress.Text} -pw {SWpassword} < commands.txt;
aus mit der Datei "commands.txt":
config
vlan 1000
untagged 4
exit
no port-security 4
port-security 4 learn-mode configured address-limit 1 mac-address "9c7bef-4e00e5"  
exit
write memory
Wenn ich das ganze aber im Terminal anschaue dann sieht das so aus:
unbenannt
und egal wie ich die Port-Security Befehle aufdrösele, es scheiteret immer bei 'mac-address "9c7bef-4e00e5"', ich habe die Mac mit "" und ohne "" probiert, bringt nichts. Ich habe die Befehle einzeln geschrieben, sprich:
port-security 4 learn-mode configured 
port-security 4 address-limit 1
port-security 4 mac-address "9c7bef-4e00e5"  
Funktioniert auch nicht, das sieht dann so aus:
unbenannt2
Oder:
unbenannt3
Ich komme hier leider nicht weiter..

Hat jemand eine Idee?

viele Grüße

Florian

Content-ID: 2544398569

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

Ausgedruckt am: 23.11.2024 um 23:11 Uhr

7907292512
7907292512 23.10.2023 aktualisiert um 16:34:27 Uhr
Goto Top
  • Den Befehl schon außerhalb deines eigene
Programmes getestet? Gleiches Verhalten?
  • Wie sieht dein Programm-Code zum Ausführen aus?
  • Alternativ die Commands mittels statt über stdin über den Parameter -m commands.txt getestet?

Gruß Sid.
DarkZoneSD
DarkZoneSD 23.10.2023 um 17:09:05 Uhr
Goto Top
Moin,
habe ich beides schon ausprobiert, den Programmcode kann ich morgen mal posten wenn ich wieder im Büro bin.

Wenn ich es über die cmd direkt mache schneidet er ab bei:
port-security 4 learn-mode configured address-limit 1 ma

bei -m bekomme ich den Error:
FATAL ERROR: Server refused to start a shell/command
deshalb stdin.

Grüße
DarkZoneSD
DarkZoneSD 24.10.2023 aktualisiert um 09:23:57 Uhr
Goto Top
Guten Morgen,
* Den Befehl schon außerhalb deines eigene
Programmes getestet? Gleiches Verhalten?
Habs Heute nochmal getestet (man weiß ja nie), selbes verhalten..
command:
.\plink.exe manager@10.1.40.140 -pw supersicher < commands.txt
Input: (in der Textdatei selbst ist ein return in der ersten Zeile)
config
vlan 1000
untagged 4
exit
no port-security 4
port-security 4 learn-mode configured address-limit 1
port-security 4 mac-address "9c7bef-4e00e5"  
write memory
Output:
unbenannt
* Wie sieht dein Programm-Code zum Ausführen aus?
// Create ProcessStartInfo to configure the command prompt process
                ProcessStartInfo psi = new ProcessStartInfo();

                psi.FileName = "cmd.exe"; // Specifies the command prompt as the executable  
                psi.WindowStyle = ProcessWindowStyle.Normal; // Set window style to normal
                                                             // Configure the command to run plink.exe with the provided IP address, username, and password
                psi.Arguments = $"/k cd {CurrentResDirectory()} & ansicon.exe .\\plink.exe {SWusername}@{txtIPAdress.Text} -pw {SWpassword} < commands.txt";  

                // Start the command prompt process
                Process.Start(psi);
Vor .\Plink.exe steht noch ansicon.exe, die filtert die ANSI-Escape Codes aus dem Terminal raus, da Plink damit alleine nicht zurecht kommt.

Gruß Sid.
Grüße
7907292512
7907292512 24.10.2023 um 09:52:47 Uhr
Goto Top
Vor .\Plink.exe steht noch ansicon.exe
Das wird wohl der Grund sein. Zusätzlich das Encoding der Command-Datei und die Zeilenenden kontrollieren und mal auf \n statt \r\n wechseln.
DarkZoneSD
DarkZoneSD 24.10.2023 aktualisiert um 11:16:48 Uhr
Goto Top
Habs mal ein wenig abgeändert,
             byte[] bytes = File.ReadAllBytes($"{CurrentResDirectory()}\\commands.txt");  
                string text = Encoding.ASCII.GetString(bytes);
                text = text.Replace("\r\n", "\n");  
                File.WriteAllText($"{CurrentResDirectory()}\\commandsClean.txt", text, Encoding.ASCII);  

                // Create ProcessStartInfo to configure the command prompt process
                ProcessStartInfo psi = new ProcessStartInfo();

                psi.FileName = "cmd.exe"; // Specifies the command prompt as the executable  
                psi.WindowStyle = ProcessWindowStyle.Normal; // Set window style to normal
                                                             // Configure the command to run plink.exe with the provided IP address, username, and password
                psi.Arguments = $"/k cd {CurrentResDirectory()} & ansicon.exe .\\plink.exe {SWusername}@{txtIPAdress.Text} -pw {SWpassword} < commandsClean.txt";  
                
                // Start the command prompt process
                Process.Start(psi);
unbenannt
der \r\n - \n replace scheint zumindest mal funktioniert zu haben, da er nicht immer ein Return an den switch sendet..
Allerdings wird die Datei nicht als ASCII codiert sondern immernoch als UTF-8, irgendwo ist noch ein denkfehler.

Mac-Adressen Befehl wird trotzdem abgeschnitten, egal ob mit oder ohne Ansicon.

NACHTRAG:

Allerdings wird die Datei nicht als ASCII codiert sondern immernoch als UTF-8, irgendwo ist noch ein denkfehler.

Mac-Adressen Befehl wird trotzdem abgeschnitten, egal ob mit oder ohne Ansicon.

Ich habe das ganze jetzt zum laufen gebracht, allerdings unter UTF-8, ich habe lediglich die reihenfolge der Befehle in der .txt Datei geändert(??) was mich verwirrt da die Befehle an sich in einer normalen ssh session in dieser Reihenfolge perfekt funktionieren. An einem fehlenden return solltees auch nicht liegen das habe ich getestet..
Allerdings lässt er jetzt "write memory" aus.
Input:
config
no port-security 4
port-security 4 learn-mode configured address-limit 1 mac-address 9c7bef-4e00e5
vlan 1000
untagged 4
exit
write memory
unbenannt3
unbenannt2
7907292512
7907292512 24.10.2023 aktualisiert um 11:50:08 Uhr
Goto Top
Allerdings lässt er jetzt "write memory" aus.
In deinem Schnippsel oben fehlt ein Return nach der letzten Zeile so das dieses wohl deswegen nicht übergeben wird.
DarkZoneSD
DarkZoneSD 24.10.2023 um 11:55:27 Uhr
Goto Top
In deinem Schnippsel oben fehlt ein Return nach der letzten Zeile so das dieses wohl deswegen nicht übergeben wird.
Steht in der Datei, wird in der code Formatierung gekürzt.