stdout
auf einem CentOS-Server muss stdin
auf einen anderen CentOS-Server umgeleitet werden. Ist das möglich?
Aktualisieren
ScottPack, MikeyB und Jofel haben alle gültige Antworten. Ich habe Scott die Antwort gegeben, weil es immer schön ist, in Sicherheit zu sein, auch wenn meine Frage keine Sicherheitsanforderung enthält. Die Vorschläge der beiden anderen Fellows werden jedoch auch funktionieren.
Antworten:
Das ist ein unverfrorenes Ja.
Wenn
ssh
ein Befehl auf einem Remote-Server ausgeführt wird, führt er eine ausgefallene interne Eingabe- / Ausgabeumleitung durch. Tatsächlich finde ich dies eine der subtil schöneren Funktionen von OpenSSH. Wenn Sie Insbesondere verwendenssh
einen beliebigen Befehl auf einem entfernten System auszuführen, dann ssh KarteSTDIN
undSTDOUT
derjenigen der Befehl ausgeführt wird.Angenommen, Sie möchten ein Backup-Tarball erstellen, möchten oder können es jedoch nicht lokal speichern. Lassen Sie uns einen Blick auf diese Syntax werfen:
Wir erstellen einen Tarball und schreiben ihn an
STDOUT
normale Dinge. Da wir mit ssh einen Remote-Befehl ausführen, wird STDIN demSTDIN
von zugeordnetcat
. Welche wir dann in eine Datei umleiten.quelle
netcat
an beiden Enden ein sehr einfacher und leichter Kommunikationskanal.tar cf - /path/to/dir | nc 1.2.3.4 5000
auf einem Servernc -l -p 5000 > backupfile.tar
auf dem anderen.Eine bequeme Möglichkeit, Daten zwischen Hosts weiterzuleiten, wenn Sie sich keine Sorgen um die Sicherheit über das Kabel machen müssen, besteht darin,
netcat
die Verbindung an beiden Enden herzustellen.Auf diese Weise können Sie sie auch asynchron einrichten:
Führen Sie auf dem "Empfänger" (in Wirklichkeit haben Sie bidirektionale Kommunikation, aber es ist einfacher, sich das so vorzustellen) Folgendes aus:
Führen Sie auf dem "Absender" Folgendes aus:
quelle
Ein sehr leistungsfähiges Tool zum Erstellen von uni- und bidirektionalen Verbindungen ist
socat
. Um einen kurzen Überblick über die Möglichkeiten zu erhalten, sehen Sie sich die Beispiele in der Manpage an .Es ersetzt
netcat
und ähnliche Tools vollständig und unterstützt SSL-verschlüsselte Verbindungen. Für Anfänger mag es nicht einfach genug sein, aber es ist zumindest gut zu wissen, dass es existiert.quelle
TL; DR
Die Dinge werden nur etwas komplizierter, wenn Sie einen Bastion-Server haben , der verwendet werden muss.
Sie können
ssh
als Befehl übergeben, umssh
so zu mögen:cat local_script.sh | ssh -A usera@bastion ssh -A userb@privateserver "cat > remote_copy_of_local_script.sh; bash remote_copy_of_local_script.sh"
Vorsicht vor Pseudo-Terminals
Beachten Sie, dass der wichtigste Punkt hier ist, dass
ssh
, wie bei den meisten Werkzeugen, standardmäßig nur behandeltstdout
undstdin
korrigiert wird.Wenn Sie jedoch beginnen Option wie um zu sehen ,
Disable pseudo-terminal allocation.
undForce pseudo-terminal allocation.
man kann einen wenig Versuch und Irrtum tun müssen. In der Regel möchten Sie dastty
Verhalten jedoch nicht ändern , es sei denn, Sie versuchen, verstümmelten / binären Müll in einem Terminal-Emulator zu beheben (was ein Mensch eintippt).Zum Beispiel neige ich dazu,
-At
den ssh-agent meiner Workstation weiterzuleiten und tmux aus der Ferne auszuführen, ohne Binärdateien zu blockieren (wie dies der Fall istssh -At bastion.internal tmux -L bruno attach
). Und auch für Hafenarbeiter (wie sosudo docker exec -it jenkins bash
).Diese beiden
-t
Flags führen jedoch dazu, dass es schwierig ist, Datenbeschädigungen aufzuspüren, wenn ich so etwas wie Folgendes versuche:quelle
Versuchen Sie, Ihren öffentlichen ssh-Schlüssel mit nur einem Befehl auf einem anderen Host zu speichern
quelle
Ich finde dies am einfachsten, nachdem für den Benutzer kein Passwort-Handshake zwischen den Servern eingerichtet wurde, als den Sie den Befehl ausführen:
Unkomprimiert
Komprimierung im laufenden Betrieb
quelle
ssh
bereits für die Komprimierung konfiguriert ist.Compression
könnte in einer der config-dateien gesetzt werden, eine schnelle überprüfung, obssh -v localhost exit 2>&1 | fgrep -i compress
irgendwelche ausgaben vorliegen (afaik gibt es keine möglichkeit, die konfiguration zu sichern, wie ssh sie eingelesen hat).tar
hat eine-C path
Flagge , die sowohl für die Werkec
undx
Befehle. Sie müssen dort keinen separatencd
Befehl eingeben. (Es ist jedoch zu beachten, dass Sie mehr als einen Befehl ausführen können.)-C
ist eine GNU-Erweiterung (obwohl sie jetzt auch von bsdtar und schily tar unterstützt wird)