Muss ich auf einen Zwischenserver sftp?


11

Ich kann nicht direkt in einen bestimmten Host sftp. Um eine Datei von meinem Heimcomputer auf den Host zu verschieben, muss ich eine Datei auf einen Zwischenhost senden. ssh in den Zwischenwirt; und sftp die Datei zum endgültigen Ziel. Ist es möglich, solchen Wahnsinn zu vermeiden?

Antworten:


28

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.


Danke, das werde ich versuchen. und du hast recht, es ist das falsche Forum; Es tut uns leid.

Nachdem ich dem Benutzer @ localhost Passwort gegeben hatte, erhielt ich die Nachricht: Nachricht zu lange empfangen 1131376238
user74094

14

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):

sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost

(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:

Host finalhost
    ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null

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 ...


Danke Gordon. Es dauert beide Passwörter und wird dann mit der Nachricht angehalten: Empfangene Nachricht zu lang 1131376238
user74094

Es hört sich so an, als ob etwas in der Verbindung - vielleicht ein Anmeldeskript bei einem der Hosts, vielleicht nc - zusätzlichen Text über die Verbindung schreibt, der sftp verwirrt (siehe diese FAQ auf snailbook.com ). 1131376238 ist die Dezimalcodierung der ASCII-Zeichen "Conn", daher handelt es sich wahrscheinlich um eine Meldung wie "Verbindung herstellen zu ..." "Verbindung hergestellt von ..." oder möglicherweise "Verbindung fehlgeschlagen". Versuchen Sie es mit ssh anstelle von sftp, prüfen Sie, ob die Nachricht sichtbar gedruckt ist, und erkennen Sie möglicherweise, woher sie stammt.
Gordon Davisson

ssh hat gut funktioniert. Ich sollte auch erwähnen, dass ich häufig mit der Frage konfrontiert bin: Die Authentizität des Hosts 'xxxxx (<kein Hostip für Proxy-Befehl>)' kann nicht festgestellt werden. Der Fingerabdruck des RSA-Schlüssels lautet 37: 40: d4: c7: usw. Sind Sie sicher, dass Sie die Verbindung fortsetzen möchten (Ja / Nein)? ja
user74094

Gordon, sehr nützlich! Ich füge dies meiner Textdatei mit Befehlszeilen-Onelinern hinzu. Danke vielmals!
Travis Leleu

Ist das execnötig? (Es funktioniert gut hier ohne diesen Teil.)
entspricht

3

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!


0

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.


0

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 "


Ich mag es, also habe ich es versucht. Es wurde das Kennwort für A verwendet und dann die folgende Meldung angezeigt: Überprüfung des Hostschlüssels fehlgeschlagen.
user74094
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.