Ich habe Zugriff auf 3 Computer, A, B und C. Die einzigen möglichen (ssh) Verbindungen sind:
A -> B
B <-> C
Ich muss Dateien von A nach C holen, damit ich die Dateien von A nach B scannen und sie dann von B nach C scannen kann. B hat jedoch nicht viel Speicherplatz, daher ist dies keine Option. Gibt es eine Möglichkeit, Dateien von A nach C über B zu scpen? Hinweis: Ich habe auf keinem der Computer Root-Zugriff. Ich kann also keine dauerhaften Tunnel einrichten, aber korrigiere mich, wenn ich falsch liege!
A$ rsync <options> -e 'ssh B ssh' source C:destination
Antworten:
ProxyJump
Neu in OpenSSH 7.3:
(Hinter den Kulissen werden nur ProxyCommand und verwendet
ssh -W
.)ProxyCommand
Aktualisiert, um -W von anderen Antworten einzuschließen:
Wenn in A ein sehr alter SSH-Client installiert ist (ohne
-W
Unterstützung) oder in B die TCP-Weiterleitung nicht zugelassen ist (Shell-Befehle jedoch weiterhin zulässig sind), verwenden Sie folgende Alternativen:Rohre
Für nur eine Datei:
"Tunnel" durch B
Wenn Sie fertig sind, vergessen Sie nicht, den zuvor gestarteten
ssh
Prozess abzubrechen (der aufgrund von in den Hintergrund gefallen ist-f -N
).-f
Fordert ssh auf, kurz vor der Befehlsausführung in den Hintergrund zu wechseln. Dies ist nützlich, wenn ssh nach Passwörtern oder Passphrasen fragt, der Benutzer dies jedoch im Hintergrund wünscht. Dies impliziert -n.-N
Führen Sie keinen Remote-Befehl aus. Dies ist nützlich, um nur Ports weiterzuleiten."Tunnel" durch B nach A umkehren
Funktioniert aber nicht immer:
-R
Gibt an, dass Verbindungen zu dem angegebenen TCP-Port oder Unix-Socket auf dem Remote-Host (Server) an den angegebenen Host und Port oder Unix-Socket auf der lokalen Seite weitergeleitet werden sollen.quelle
scp
von C, obwohl B zu A, die Sie tun könnenA$ scp -oProxyJump=B C:destination thefile
.Versionen von scp ab Anfang 2011 und später haben möglicherweise die Option "-3":
Wenn Sie dies haben, können Sie einfach ausführen:
quelle
Fast alles wurde bereits gesagt, aber hier ist mein letzter Cent: Ich verwende die ProxyCommand-Variante ohne
nc
nochsoc
. Basierend auf OpenSSH Proxies und Jumphost Cookbook habe ich folgende Konfiguration erstellt:Wir haben also folgende Spieler:
Zuerst fügte ich meinen lokalen öffentlichen Schlüssel von meinem Heimat-Host
.ssh/id_dsa.pub
zu.ssh/authorized_keys
sowohl Hop- als auch Ziel-Hosts hinzu. Ja, derselbe öffentliche Schlüssel vom Home-Host für beide. Normalerweise ist dies der öffentliche HOP-Schlüssel, den Sie dem TARGET-Schlüssel hinzufügen müssen.Dann habe ich
.ssh/config
ein wenig optimiert, indem ich folgenden Eintrag hinzugefügt habe:Danach wird der Kopiervorgang ist so einfach wie:
scp FILE TARGET_HOST:
. Es werden doppelte Banner sowohl vom Hop- als auch vom Zielknoten angezeigt, aber es funktioniert.Natürlich können Sie oben verwenden , um direkt auf das Ziel ssh:
ssh TARGET_HOST
. Es funktioniert mit scp und ssh.Eine weitere allgemeinere Option könnte das Dienstprogramm sshuttle sein, bei dem es sich anscheinend um eine Art transparenten Proxy handelt (vpn über ssh). In Ihrem Fall von A-> B <-> C können Sie eine Verbindung zu jedem Knoten im Netzwerk von C herstellen: A-> B- [CDEFG]. Es braucht keinen Administrator, aber es benötigt Python 2.7 (3.5 auch OK), was nicht immer das ist, was wir haben. Es lohnt sich, es zu versuchen.
quelle
in einer anderen Schale:
Dies verwendet die Portweiterleitung. Die einzige Einschränkung hier ist, dass Host B konfiguriert werden muss, um die Portweiterleitung zuzulassen. Ansonsten sollte dies gut funktionieren.
In der Art der Erklärung,
-L
und-R
ermöglichen es Ihnen, Ports weiterzuleiten. In-L
wird als erster Port angegeben, dass der Port ssh auf dem Ursprungscomputer (Host A) zu lauschen beginnt und über Ihre SSH-Verbindung alles, was er auf diesem Port empfängt, an Host B weiterleitet und dann an Port 22 an Host C weiterleitet.bearbeiten
Ich habe die Syntax ein wenig durcheinander gebracht. Es richtet eine Weiterleitung auf Ihrem LOCAL-Computer ein.
quelle
Die ProxyCommand-Antwort von Grawity hat bei mir funktioniert, aber da ich mit SSH weniger vertraut bin, waren einige Experimente erforderlich. Ich dachte, ich würde Grawitys Antwort nur ausführlicher formulieren, um anderen Neulingen wie mir bei SSH zu helfen. Hier sind die Definitionen für eine explizitere Notation:
Maschine A: Die Maschine, auf der Sie sich befinden
Server B: [email protected] (der Sprunghost oder der mittlere Server)
Server C: [email protected] (der Remote-Server, auf den Sie kopieren möchten)
ProxyCommnad
Konkretes Beispiel
Nehmen wir als konkretes Beispiel an, Sie haben Zugriff auf einen Server mit IP
0.0.1.2
mit einem Benutzerkonto mit dem Namenbar
(Server C). Dazu müssen Sie sich jedoch zuerst bei einem Server mit der IP-Adresse0.0.1.1
mit dem Benutzerkontofoo
(Server B) anmelden . Jetzt wollen Sie Datei kopieren ,baz.txt
auf dem aktuellen Maschine (Machine A) zu Server befindet0.0.1.2
‚s -/home/bar/
Verzeichnis. Um den obigen ProxyCommand für dieses Beispiel zu verwenden, führen Sie Folgendes aus:Sie können eine Datei auch genauso einfach von Server C kopieren, indem Sie die Reihenfolge der Datei und des Ziels ändern. Wenn Sie sich zum Beispiel
baz.txt
bereits auf dem Server0.0.1.2
befunden haben, können/home/bar/
Sie ihn auf Ihren Computer kopieren, indem Sie Folgendes verwenden:Hoffe, dies hilft Menschen, die Dinge brauchen, die für sie ein bisschen mehr als andere formuliert sind.
quelle