Von Ihrem lokalen Computer aus können Sie einen SSH-Tunnel über den Zwischenhost zum endgültigen Host erstellen:
ssh user@intermediate -L 2000:final:22 -N
Dadurch wird Port 2000 auf Ihrem lokalen Host geöffnet, der durch Tunneln über den Zwischenhost eine direkte Verbindung zum endgültigen Server auf Port 22 herstellt. Stellen Sie nun in einer anderen Eingabeaufforderung eine Verbindung mit SFTP auf Port 2000 her, um zum endgültigen Server getunnelt zu werden, und beachten Sie, dass der hier angegebene Benutzer für den endgültigen Host bestimmt ist:
sftp -P 2000 user@localhost
Scheint , wie dies auf gehört superuser.com oder serverfault.com though.
Sie können die ProxyCommand-Option von SFTP verwenden, um eine SFTP-Verbindung transparent über eine SSH-Verbindung zu tunneln (ähnlich der Antwort von WhiteFang34, jedoch über stdin & stdout der SSH-Verbindung anstelle eines weitergeleiteten lokalen TCP-Ports):
(Dies setzt voraus, dass auf dem Zwischenhost netcat als / usr / bin / nc installiert ist. Andernfalls müssen Sie möglicherweise eine gleichwertige Methode zum Gatewaying von stdin & stdout in eine TCP-Sitzung finden / installieren.)
Was an dieser Option wirklich cool ist, ist, dass Sie sie zu Ihrer ~ / .ssh / config-Datei hinzufügen können, wodurch sie transparent wird:
Mit diesem Eintrag können Sie sftp, scp und ssh für finalhost verwenden, und der Tunnel wird automatisch aufgerufen. Der einzige nicht transparente Teil ist, dass zwei Passwörter abgefragt werden (intermediatehost gefolgt von finalhost), aber wenn Sie möchten, können Sie dies auch mit SSH-Schlüsselpaaren beseitigen ...
quelle
exec
nötig? (Es funktioniert gut hier ohne diesen Teil.)Sie können Daten an den auf Ihrem Computer ausgeführten ssh-Prozess weiterleiten und dann auf dem Zwischencomputer einen Befehl ausführen, der stdin liest und gegebenenfalls an sftp sendet.
Dies kann in einem Oneliner auf Ihrem lokalen Computer erfolgen, obwohl das Zitieren von Argumenten zu ssh Sorgfalt erfordert. Ich bin gerade auf meinem Handy und kann die Details leider nicht eingeben. Vielleicht kann jemand anderes diese Antwort als Übung vervollständigen!
quelle
Ich gehe davon aus, dass der endgültige Host durch eine Firewall geschützt ist, und ich kann nur raten, mit welchen Methoden Sie ihn umgehen können.
Beispiel: Stellen Sie ssh von Ihrem lokalen Computer aus bereit, dann ssh für den ersten Host, dann ssh für den zweiten und sftp vom letzten Host für Ihren Computer.
quelle
Nehmen wir an, A und B sind der erste und der zweite Host. Und die zu kopierende Datei ist foo
Anstelle von SFTP können Sie Folgendes verwenden
cat foo | ssh Eine "Katze -> foo"
Jetzt können Sie 2 davon miteinander verketten
cat foo | ssh A "cat - | ssh B" cat -> foo "
quelle