SFTP przez podwójny przeskok serwera

15

Próbuję opracować metodę, która pozwoli mi uzyskać dostęp do plików na serwerze SFTP, których nie mogę uzyskać z mojego komputera lokalnego. Obecnie mam SSH do zdalnego serwera (jest w pewnym bloku IP, z którego będzie akceptować końcowy serwer SFTP), a następnie SFTP do serwera docelowego. Stamtąd mam getpliki, którymi jestem zainteresowany, upuszczając je w ten sposób na serwer pośrednika, z którego mogę pobrać pliki przez udział Samby lub bezpośrednio scp. Pracuję także w odwrotnej kolejności, gdzie upuszczam pliki na pośrednika, SSH do niego, a następnie SFTP do miejsca docelowego i putje do odpowiednich folderów.

Moim celem jest skrócenie tego. Niefortunne ograniczenia polegają na tym, że mój komputer to Windows (używam KiTTy i / lub Cygwin) i nie mogę w żaden sposób modyfikować serwera pośrednika (lub serwera docelowego). Jestem skłonny korzystać z wiersza poleceń lub programów GUI, o ile działa i jest bezpłatny.

Jakieś pomysły?

josh.trow
źródło

Odpowiedzi:

24

Zasadniczo bez graficznego interfejsu użytkownika ani innych udogodnień:

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

Możesz ustawić tę wartość domyślną, edytując plik konfiguracyjny, domyślnie ~ / .ssh / config

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

To pozwala ci to zrobić

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

Oczywiście z tego rodzaju magią możesz łatwo

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

W systemie Windows używałbyś WinSCP, który jest dostarczany z (myślę, że IIRC) PLINK (z pakietu Putty). Domyślam się, że domyślna lokalizacja configpliku ssh jest inna (musiałbym poszukać go w Google), ale jestem pewien, że działa mniej więcej tak samo.

Zauważ, że jedyne, czego potrzebujesz, aby to zadziałało, to „netcat ( nc)” na środkowym serwerze (pierwszy przeskok). Jest to wszechobecne narzędzie dla systemu Linux / UNIX [1]; Bardzo łatwo jest zbudować statycznie połączoną wersję, która powinna działać, jeśli można ją tam skopiować.

[1] zauważ, że istnieją pewne smaki, więc może być konieczne, aby opcja -w została upuszczona / napisana inaczej

sehe
źródło
1
Proszę pana, nie mam pojęcia, jak mnie to cieszyło :) Idealnie!
josh.trow
@ josh.trow: Nie, ale cieszę się, że mi powiedziałeś :) W każdej chwili
patrz
Chociaż, jak już stwierdzono @ josh.trow, WinSCP ma wbudowaną funkcję tunelowania (patrz druga odpowiedź), jeśli kiedykolwiek będziesz potrzebować użyć konfiguracji tunelu przez zewnętrzną aplikację, oto przewodnik: winscp.net/eng/docs/ guide_tunnel
Martin Prikryl
9

Nie zamierzam ustawić tego jako akceptowanej odpowiedzi, ponieważ nigdy nie znalazłbym tego bez @sehe i @Jubub, ale oto, co znalazłem, co upraszcza wszystko ...

WinSCP ma możliwość korzystania z wbudowanego tunelu SSH. Nie wiem, kiedy pojawiła się ta funkcja, ale nigdy wcześniej jej nie zauważyłem.

Ustawienia tunelu WinSCP

josh.trow
źródło
Dokumentacja funkcji tunelowania: winscp.net/eng/docs/tunneling and winscp.net/eng/docs/ui_login_tunnel
Martin Prikryl
działa również w filezilla!
Hayden Thring
ta funkcja pozwala tylko na pojedynczy tunel ... jak dodać drugi tunel?
zeetit
@zeetit Następnie musisz użyć zewnętrznego tunelu. Wszystkie opcje tunelowania są udokumentowane w przewodniku WinSCP dotyczącym tunelowania .
Martin Prikryl
2

Jedną z moich sugestii byłoby utworzenie serwera proxy skarpet za pomocą kit (z okna systemu Windows), a następnie proxy nad nim klienta SFTP (powiedzmy Filezilla sftp).

Nie musisz robić nic specjalnego w ten sposób, po prostu włącz serwer proxy putty socks5, włącz filezilla i prześlij pliki na serwer docelowy.

(you ==socks5 proxy==> middle server) ==> destination server
Kuba
źródło
Wygląda na to, że rozwiązujesz inny problem, naprawdę trudniejszy. Problem OP polega na tym, że ostatecznego miejsca docelowego nie można routować z klienta - wychodzący ruch SSH jest w porządku. ( Uważam, że twoje rozwiązanie jest potrzebne do „tunelowania” ruchu SSH przez proxy? )
patrz
@sehe .. co? Konfigurujesz serwer proxy SSH 5 (tunel ssh do środkowej skrzynki), a następnie po prostu proxy ruch SFTP do skrzynki docelowej, podszywając się pod serwer środkowy. Jaki inny problem rozwiązuję?
Jakub