SFTP über Double Server Hop

15

Ich versuche, eine Methode zu entwickeln, mit der ich auf Dateien auf einem SFTP-Server zugreifen kann, auf die ich von meinem lokalen Computer aus nicht zugreifen kann. Derzeit muss ich SSH zu einem Remote-Server (es befindet sich in einem bestimmten IP-Block, den der endgültige SFTP-Server akzeptiert) und dann von dort SFTP zum Zielserver. Von dort aus werden getdie Dateien, an denen ich interessiert bin, auf den Zwischenhändler-Server abgelegt, von dem ich die Dateien entweder über eine Samba-Freigabe oder direkt abrufen kann scp. Ich arbeite auch umgekehrt, wo ich die Dateien auf dem Mittelsmann ablege, SSH darauf, dann SFTP auf das Ziel und putsie in die entsprechenden Ordner.

Mein Ziel ist es, dies zu verkürzen. Die unglücklichen Einschränkungen sind, dass mein Computer Windows ist (ich verwende KiTTy und / oder Cygwin) und ich den Mittelsmann-Server (oder den Zielserver) in keiner Weise ändern kann. Ich bin bereit, Befehlszeilen- oder GUI-Programme zu verwenden, solange es funktioniert und kostenlos ist.

Irgendwelche Ideen?

josh.trow
quelle

Antworten:

24

Im Wesentlichen ohne die grafische Benutzeroberfläche oder andere Annehmlichkeiten:

ssh -o ProxyCommand='ssh myfirsthop nc -w 10 %h %p' mydestination

Sie können diese Standardeinstellung festlegen, indem Sie die Konfigurationsdatei bearbeiten, standardmäßig ~ / .ssh / config

Host mydestination, mydest2, mydest3
ProxyCommand ssh myfirsthop nc -w 10 %h %p

Dies ermöglicht es Ihnen dann zu tun

ssh mydestination
scp mydest2:file.txt ./
scp file.txt mydest3:/tmp/

Natürlich können Sie mit dieser Art von Magie leicht

mkdir -pv /tmp/mydest3tmp          # create mountpoint
sshfs mydest3:/tmp /tmp/dest3tmp/  # mount :)

Unter Windows würden Sie WinSCP verwenden, das mit (ich denke IIRC) PLINK (aus der Putty Suite) geliefert wird. Ich nehme an, der Standardspeicherort für die SSH- configDatei ist anders (ich müsste dafür googeln), aber ich bin sicher, dass es mehr oder weniger gleich funktioniert.

Beachten Sie, dass das einzige, was Sie dafür benötigen, 'netcat ( nc)' auf dem mittleren Server ist (erster Hop). Es ist ein allgegenwärtiges Tool unter Linux / UNIX [1]; Es ist ziemlich einfach, eine statisch verknüpfte Version zu erstellen, die funktionieren sollte, wenn Sie sie dort zuerst kopieren können.

[1] Beachten Sie, dass es einige Geschmacksrichtungen gibt, sodass die Option -w möglicherweise anders entfernt / geschrieben werden muss

sehe sehen
quelle
1
Sie, Sir, haben keine Ahnung, wie glücklich mich das gerade gemacht hat :) Perfekt!
Josh.Trow
@ josh.trow: Nein, aber ich bin froh, dass du es mir gesagt hast :) Jederzeit
sehe
Obwohl, wie @ josh.trow bereits festgestellt hat, in WinSCP eine Tunnelfunktion integriert ist (siehe die andere Antwort), finden Sie hier eine Anleitung, wenn Sie das Tunnel-Setup tatsächlich von einer externen Anwendung verwenden müssen: winscp.net/eng/docs/ guide_tunnel
Martin Prikryl
9

Ich werde dies nicht als akzeptierte Antwort festlegen, da ich es ohne @sehe und @Jakub nie gefunden hätte, aber hier ist, was ich gefunden habe, das alles vereinfacht ...

WinSCP kann einen integrierten SSH-Tunnel verwenden. Ich weiß nicht, wann diese Funktion angekommen ist, aber ich habe sie noch nie bemerkt.

WinSCP-Tunneleinstellungen

josh.trow
quelle
Dokumentation der Tunnelfunktion: woncp.net/eng/docs/tunneling und winscp.net/eng/docs/ui_login_tunnel
Martin Prikryl
funktioniert auch in filezilla!
Hayden Thring
Diese Funktion erlaubt nur einen einzelnen Tunnel ... wie fügt man einen zweiten Tunnel hinzu?
Zeetit
@zeetit Dann musst du einen externen Tunnel benutzen. Alle Tunneloptionen sind im WinSCP-Handbuch zum Tunneln dokumentiert .
Martin Prikryl
2

Einer meiner Vorschläge wäre, einen Socken-Proxy mit Putty (aus Ihrer Windows-Box) zu erstellen und dann Ihren SFTP-Client darüber zu vertreten (z. B. Filezilla sftp).

Auf diese Weise müssten Sie nichts Besonderes tun. Schalten Sie einfach Ihren putty socks5-Proxy ein, aktivieren Sie filezilla und senden Sie Ihre Dateien an den Zielserver.

(you ==socks5 proxy==> middle server) ==> destination server
Jakub
quelle
Es scheint, dass Sie ein anderes Problem lösen, ein wirklich schwierigeres. Das Problem des OP ist, dass das endgültige Ziel nicht vom Client weitergeleitet werden kann - ausgehender SSH-Verkehr ist in Ordnung. ( Ich glaube, Ihre Lösung wird benötigt, um SSH-Verkehr über einen Proxy zu "tunneln"? )
sehe
@sehe .. was? Sie richten einen SSH Socks 5-Proxy ein (SSH-Tunnel zur mittleren Box) und stellen dann Ihren SFTP-Verkehr einfach zur Zielbox, indem Sie sich dort als mittlerer Server tarnen. Welches andere Problem löse ich?
Jakub