Ist es möglich, ein Bash-Skript zu schreiben?
- würde von Maschine A gestartet werden, sich von ssh auf einer anderen Maschine B anmelden (beide Maschinen A und B wären Linux-Maschinen),
- kopiert einige Dateien auf Computer B.
- Führt auf diesen Computern ein Python-Skript und ein bestimmtes Python-Skript aus.
- überträgt die Ergebnisse zurück an Maschine A.
- meldet sich von Maschine B ab.
Ist das technisch machbar?
bash
ssh
shell-script
Aufwind
quelle
quelle
cat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/results
ControlMaster=yes
und definierenControlPath=/path/to/socketfile
, und dann eine SSH-Verbindung mit starten-f
, um ein Hintergrund-SSH auszuführen. Weisen Sie alle nachfolgenden SSH-Verbindungen an, dieselbe Socket-Datei zu verwenden.Ich kann alles in einer einzigen
ssh
Verbindung / Sitzung erledigen :Dies:
local_src
anremote_dst
,command
,remote_src
nachlocal_dst
.Aber wenn
command
weiter geschrieben wirdstdout
, ist das Ergebnis auch inlocal_dst
. Wenncommand
Eingaben von gelesen werdenstdin
, werden und empfangenEOF
.quelle
Während Sie dies in einer einzelnen SSH-Sitzung tun können, ist es etwas schwierig, das Kopieren von Dateien mit laufenden Befehlen zu kombinieren.
Der einfachste Weg, um diese Aufgabe zu lösen, besteht darin, separate SSH-Sitzungen für die drei Vorgänge auszuführen:
Dies erfordert eine dreimalige Authentifizierung bei Maschine B. Die empfohlene Methode, um eine mehrfache Authentifizierung zu vermeiden, besteht darin, die Verbindungsfreigabefunktion in modernen Versionen von OpenSSH zu verwenden: Starten Sie ein für alle Mal eine Master-Verbindung zu B und lassen Sie SSH automatisch auf diese Master-Verbindung huckepack nehmen. Fügen Sie
ControlMaster auto
und eineControlPath
Zeile zu Ihrer hinzu~/.ssh/config
, starten Sie dann eine Master-Verbindung im Hintergrund und führen Sie dann Ihre Aufgaben aus.Anstatt scp oder rsync zum Kopieren von Dateien zu verwenden, ist es möglicherweise einfacher, das Remote-Dateisystem unter SSHFS bereitzustellen . Dies kümmert sich übrigens um das Einrichten einer Master-Verbindung (vorausgesetzt, Sie haben Ihre
~/.ssh/config
wie oben angegeben eingerichtet).quelle