Komputer A (przy założeniu, że IP to 44.44.44.44) może ftpować hosta 130.89.148.12.

ftp 130.89.148.12 Connected to 130.89.148.12. 220 ftp.debian.org FTP server Name (130.89.148.12:debian8): anonymous 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. 

Komputer B (mój lokalny komputer) nie może ftpować hosta 130.89.148.12. Zbudujmy tunel ssh za pomocą polecenia ssh w ten sposób:

ssh -L -f -N localhost:2121:130.89.148.12:21 [email protected] 

Tunel ssh między moim lokalnym komputerem a komputerem A (44.44.44.44) został podłączony po hasło, aby zalogować się do 44.44.44.44.
Następnie, aby wprowadzić polecenie na mojej lokalnej konsoli komputera:

ftp localhost:2121 ftp: localhost:2121: Name or service not known 

O co chodzi z moim tunelem ssh?

Pomyśl o chexum, właściwe polecenie ftp to ftp localhost 2121 Ale nowy problem. tutaj wprowadź opis obrazu

Komentarze

  • Sprawdź na swojej ftp(1) stronie podręcznika, jak określić port. Zwykle jest ' oddzielony spacją (nie dwukropkiem) lub jako opcja -p. ' Muszę również upewnić się, że używasz pasywnego ftp, więc najpierw sprawdź instrukcję.
  • Nie umieszczaj tekstu jako obrazów.

Odpowiedź

Twoje podejście nie bierze tego pod uwagę w przeciwieństwie do innych popularnych protokołów, FTP używa zarówno portu 20, jak i portu 21 przez TCP domyślnie .

Termin pasywny odnosi się do tego, że protokół nieco zachowuje się lepiej niż początkowe implementacje.

Oto link:

http://www.slacksite.com/other/ftp.html

Port 20 / TCP jest używany do danych, a port 21 / TCP do poleceń .

W Uniksie również uprzywilejowane porty < 1024, mogą być powiązane tylko przez roota.

Więc albo zrobisz:

sudo ssh -f -N -L 20:130.89.148.12:20 -L 21:130.89.148.12:21 [email protected] 

W ten sposób nie dajesz żadnego dodatkowego portu i używasz go tylko z

ftp -p localhost 

lub jeśli nie masz roota:

ssh -f -N -L 2120:130.89.148.12:20 -L 2121:130.89.148.12:21 [email protected] 

, a następnie użyj:

ftp -p -P 2121 localhost 

From man ftp http://linux.die.net/man/1/ftp

-p tryb pasywny
-P port

lub w wersji ftp, która nie obsługuje -P (Debian 9 / Ubuntu 16.04):

ftp -p localhost 2121 

Zostawię również link do „Objaśnienia dotyczące lokalnego i zdalnego przekierowania portów tuneli SSH”

http://blog.trackets.com/2014/05/17/ssh-tunnel-local-and-remote-port-forwarding-explained-with-examples.html

Na koniec radziłbym nie używać roota w zdalnym systemie do połączeń ssh. root to bardzo potężne konto, które powinno być zarezerwowane tylko dla administrowania systemem.

Ponadto w wielu nowoczesnych Linuksach zdalne logowanie przez ssh jako root jest domyślnie wyłączone.

Dlaczego logowanie roota przez SSH jest takie złe że każdy radzi go wyłączyć?

Komentarze

  • Co? Połączenie danych nie korzysta z portu 20; używa losowego portu > 1024. Ponadto ftp nie wydaje się mieć opcji -P, przynajmniej nie w Ubuntu 16.04. Dlatego nie możesz przekazywać ftp za pomocą ssh ponieważ nie ' nie wiesz jaki losowy port zostanie wybrany po ustanowieniu połączenia danych (i otrzymujesz inny dla każdego przesyłanego pliku lub każdego raz ls).
  • Nie, serwer również nasłuchuje na efemerycznym porcie. Musi, ponieważ może obsługiwać wielu klientów i gdyby używał portu 20 dla każdego z nich, nie miałby pojęcia, który z nich odpowiada której sesji sterowania.
  • Wydrukowałem protokół FTP RFC na mojej kropce drukarki matrycowej i przestudiowałem ją, gdy miałem 16 lat. Zorientowałem się, że można wydać polecenie PASV do jednego serwera, a następnie polecenie PORT do drugiego serwera z adresem IP i numerem portu z odpowiedzi PASV z drugiego serwera i je pobrać aby wysłać plik bezpośrednio z jednego serwera na drugi, zamiast pobierać go i przesyłać samodzielnie przez modem 28,8 kb / s. Później pojawił się program o nazwie FXP, który mógł to zrobić, a także napisałem własne oprogramowanie serwera FTP dla WinNT, które rozwiało wszystko inne. Idź i spójrz na odpowiedź PASV.
  • Jesteś zdezorientowany. Nasłuchuje na porcie 21, a nie 20. Łączysz się z serwerem na porcie 21, a następnie wydajesz polecenie PORT, informując serwer, z jakim adresem IP i numerem portu powinien się połączyć, lub polecenie PASV, w którym to przypadku zaczyna nasłuchiwać połączenie danych na efemerycznym porcie i określa, który port znajduje się w odpowiedzi. Od polecenia quote pasv do ftp.gnu.org: " 227 Przechodzenie do trybu pasywnego (208,118,235,20,96,222) ". Zwróć uwagę, że serwer nasłuchuje na porcie 96 222 lub 24 798.
  • Dlaczego nie zmodyfikować go tak, aby był poprawny?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *