quickly
Goto Top

Powershell - SSH zu 15 Servern

Hallo.

Sorry... ich habe jetzt nach mehreren Stunden vermutlich einfach nur ein Brett vor dem Kopf...

Ich habe ca. 15-20 Linux Server. Hier möchte ich per SSH zugreifen. Soweit...

Die einzelnen Zugriffe klappen auch. Nur möchte ich EIN Powershell-Script (oder auch CMD) ausführen und jede Verbindungen als EXTRA Powershell-Fenster (oder Tab´s) angezeigt.
(Und wenn es geht, der Luxusteil, würde ich gerne 2 Befehle direkt ausführen.)

Mir brummt der Schädel... vermutlich habe ich bei der Suche schon zich mal drüber weggelesen...
Schon mal vielen Dank.

ssh -i C:\Users\MyUsername\.ssh\MyKey.pem -p 123 root@MyServer1.ddns.me
ssh -i C:\Users\MyUsername\.ssh\MyKey.pem -p 471 root@MyServer2.ddns.me
ssh -i C:\Users\MyUsername\.ssh\MyKey.pem -p 321 root@MyServer3.ddns.me
usw.

#Befehl 1 = hostname -f
#Befehl 2 = df -h

Content-ID: 51321596361

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

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

killtec
killtec 21.02.2024 um 14:01:56 Uhr
Goto Top
mach doch ein start vor jeden Befehl... Das sollte passen.
Michi91
Michi91 21.02.2024 um 14:48:44 Uhr
Goto Top
und schau dir mal Ansible an. Einstieg ist recht steil, aber lohnt face-smile
Quickly
Quickly 21.02.2024 um 14:53:50 Uhr
Goto Top
Zitat von @Michi91:

und schau dir mal Ansible an. Einstieg ist recht steil, aber lohnt face-smile

Hallo. Danke für den Tip. Jedoch möchte ich es gerne mit Bordwerkzeugen hinbekommen. Und auch noch RedHad... das wird dann echt zu viel.
Quickly
Quickly 21.02.2024 aktualisiert um 14:56:48 Uhr
Goto Top
Zitat von @killtec:

mach doch ein start vor jeden Befehl... Das sollte passen.

Hallo. Also wenn ich einfach "Start" davor packe geht es nicht.

Start-Process : Der Parameter kann nicht verarbeitet werden, da der Parametername "i" nicht eindeutig ist. Mögliche  
Übereinstimmungen:  -InformationAction -InformationVariable.
In Zeile:1 Zeichen:11
+ start ssh -i C:\Users\MyUser\.ssh\MyKey.pem -p 222 root@MyServer.ddns.me
+           ~~
    + CategoryInfo          : InvalidArgument: (:) [Start-Process], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameter,Microsoft.PowerShell.Commands.StartProcessCommand
killtec
killtec 21.02.2024 um 15:14:17 Uhr
Goto Top
Also du greifst von einem Windows Rechner aus zu? Da kannst du in einer normalen CMD
start Befehl Parameter
ein extra Fenster starten.
Mache ich u.a. mit Robocopy.
11078840001
11078840001 21.02.2024 aktualisiert um 15:37:58 Uhr
Goto Top
Powershell
$servers = 'MyServer1.ddns.me','MyServer2.ddns.me','MyServer3.ddns.me'  
foreach($server in $servers){
    Start-Process cmd -Argumentlist "/k ssh -i `"C:\Users\MyUsername\.ssh\MyKey.pem`" -p 123 root@$server `"hostname -f;df -h`""  
}
Batch
set "servers=MyServer1.ddns.me MyServer2.ddns.me MyServer3.ddns.me"  
for %%a in (%servers%) do start "" cmd /k ssh -i "C:\Users\MyUsername\.ssh\MyKey.pem" -p 123 root@%%a "hostname -f;df -h"  
ThePinky777
ThePinky777 21.02.2024 aktualisiert um 18:02:07 Uhr
Goto Top
so geheimtrick von hinten durchs auge face-smile

also anstatt

foreach($server in $servers){
    Start-Process cmd -Argumentlist "/k ssh -i `"C:\Users\MyUsername\.ssh\MyKey.pem`" -p 123 root@$server `"hostname -f;df -h`""    
}

machst du (Code darfst selbst rausfinden:

foreach($server in $servers){
Variable zusammenbauen und zwar deine Zeile:
ssh -i `"C:\Users\MyUsername\.ssh\MyKey.pem`" -p 123 root@$server `"hostname -f;df -h`""
nenen wir sie mal $VarServerZeile

Dann

Speicher die Variable in eine Datei Pfad\serverconnect.bat (welche immer übeschrieben wird, oder du machst dynamische Namen wie du willst...)

Und nun

    Start-Process Pfad\serverconnect.bat
}

Dann wir sich für jede .bat die du so executest ein extra DOS Fenster aufmachen.

Sprich du generierst dynamische .bat Dateien und führst sie aus face-smile


ODER für Faule....

du machst dir deine 25 .bat Dateien manuell und dann machst du eben 25 Zeilen im Powershell Script:

  Start-Process Pfad\serverconnect1.bat
  Start-Process Pfad\serverconnect2.bat
  Start-Process Pfad\serverconnect3.bat
TwistedAir
TwistedAir 21.02.2024 um 19:11:09 Uhr
Goto Top
Moin,

wenn du für ein Programm abseits der Kommandozeile offen bist, lohnt es sich mRemoteNG anzuschauen. Dort wird jede (vorab gespeicherte) Verbindung in einem eigene Tab geöffnet. Und das Programm kann mit weiteren Protokollen umgehen. face-smile

Die Verwendung eines Key Files mit mRemoteNG wird z. B. hier beschrieben: https://technotes.khitrenovich.com/opening-ssh-aws-hosted-linux-servers- ...

Gruß
TA
11078840001
11078840001 21.02.2024 aktualisiert um 21:48:21 Uhr
Goto Top
Zitat von @ThePinky777:
so geheimtrick von hinten durchs auge face-smile
Joa, Ich fahr auch immer erst durch die Waschanlage um mich danach auf der ortsansässigen Schlamm Strecke auszutoben ... 🙃 Unglaublich ... 🤣.
Quickly
Quickly 22.02.2024 um 08:47:57 Uhr
Goto Top
Zitat von @11078840001:

Powershell
$servers = 'MyServer1.ddns.me','MyServer2.ddns.me','MyServer3.ddns.me'  
foreach($server in $servers){
    Start-Process cmd -Argumentlist "/k ssh -i `"C:\Users\MyUsername\.ssh\MyKey.pem`" -p 123 root@$server `"hostname -f;df -h`""  
}
Batch
set "servers=MyServer1.ddns.me MyServer2.ddns.me MyServer3.ddns.me"  
for %%a in (%servers%) do start "" cmd /k ssh -i "C:\Users\MyUsername\.ssh\MyKey.pem" -p 123 root@%%a "hostname -f;df -h"  

Super, vielen Dank! Ich muss sagen, dass ich mir bei Debian eine 2-3 geben würde... bei Powershell allerdings eine 5. face-smile
Danke!

Mein Fehler, war nicht klar:
Die Befehle werden perfekt ausgeführt!
Jedoch würde ich gerne eine aktive SSH-Sitzung der Server behalten.
Logik:
a) Ich frage Namen und Platz ab.
b) Dann möchte ich manuell weitere Scripte und Befehle ausführen.
11078840001
Lösung 11078840001 22.02.2024 aktualisiert um 09:29:48 Uhr
Goto Top
Dann möchte ich manuell weitere Scripte und Befehle ausführen.
Einfach noch ein
;/bin/bash -i
Also
............ `"hostname -f;df -h;/bin/bash -i`""  
ans Ende der Befehlskette hängen, dann bleibt die Session offen für weitere Root-Schweinereien ...
Quickly
Quickly 22.02.2024 um 09:59:23 Uhr
Goto Top
Zitat von @11078840001:

Dann möchte ich manuell weitere Scripte und Befehle ausführen.
Einfach noch ein
;/bin/bash -i
Also
............ `"hostname -f;df -h;/bin/bash -i`""  
ans Ende der Befehlskette hängen, dann bleibt die Session offen für weitere Root-Schweinereien ...

Top, super, danke!
Geomatrix
Geomatrix 22.02.2024 um 13:28:55 Uhr
Goto Top
Kann auch nur empfehlen das via mRemoteNG zu machen, kannst auch als externes Programm ein SFTP Integration anzulegen und das kannst Linux so entspannt administrieren.
Quickly
Quickly 22.02.2024 um 15:18:13 Uhr
Goto Top
Zitat von @Geomatrix:

Kann auch nur empfehlen das via mRemoteNG zu machen, kannst auch als externes Programm ein SFTP Integration anzulegen und das kannst Linux so entspannt administrieren.

Werde ich mir mal als Alternative ansehen. Danke...