Počítač A (předpokládá se, že ip je 44.44.44.44) může hostitele ftp 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.
Počítač B (můj místní počítač) nemůže ftp hostitele 130.89.148.12. Pojďme s vytvořit tunel ssh pomocí příkazu ssh takto:
ssh -L -f -N localhost:2121:130.89.148.12:21 [email protected]
Tunel ssh mezi mým místním počítačem a počítačem A (44.44.44.44) byl připojen po heslo pro přihlášení do 44.44.44.44.
Poté zadejte příkaz na místní konzole počítače:
ftp localhost:2121 ftp: localhost:2121: Name or service not known
Co se děje s mým tunelem ssh?
Mysli na chexum, správný příkaz ftp je ftp localhost 2121 Ale nový problém.
Komentáře
Odpověď
Váš přístup to nebere v úvahu na rozdíl od jiných běžných protokolů používá FTP oba port 20 a port 21 přes TCP ve výchozím nastavení .
Termín pasivní označuje, že protokol se mírně chová lépe než původní implementace.
Zde je odkaz:
http://www.slacksite.com/other/ftp.html
Pro data se používá port 20 / TCP a pro příkazy port 21 / TCP .
V systému Unix, také privilegované porty < 1024, lze vázat pouze rootem.
Takže buď vy:
sudo ssh -f -N -L 20:130.89.148.12:20 -L 21:130.89.148.12:21 [email protected]
Tímto způsobem neposkytujete žádný další port a používáte jej pouze s
ftp -p localhost
nebo pokud nemáte root:
ssh -f -N -L 2120:130.89.148.12:20 -L 2121:130.89.148.12:21 [email protected]
a pak použijte:
ftp -p -P 2121 localhost
z man ftp http://linux.die.net/man/1/ftp
-p pasivní režim
-P port
nebo pokud s verzí ftp
, která nepodporuje -P
(Debian 9 / Ubuntu 16.04):
ftp -p localhost 2121
Nechám také odkaz na „Vysvětlení místního a vzdáleného přesměrování tunelů SSH tunelů“
Nakonec bych doporučil nepoužívat root ve vzdáleném systému pro připojení ssh. root je velmi silný účet a měl by být vyhrazen pouze pro správu systému.
Kromě toho je v mnoha moderních systémech Linux ssh vzdálené přihlášení jako root ve výchozím nastavení zakázáno.
Proč je přihlášení rootem pomocí SSH tak špatné že každý doporučuje zakázat to?
Komentáře
- Co? Datové připojení nepoužívá port 20; používá náhodný port > 1024. Zdá se, že
ftp
nemá možnost-P
, přinejmenším ne v Ubuntu 16.04. Proto nemůžete přeposílat ftp pomocí ssh, protože nevíte, jaký náhodný port bude zvolen při navázání datového připojení (a pro každý přenesený soubor nebo každý dostanete jiný časls
). - Ne, server také poslouchá na dočasném portu. Musí, protože může obsluhovat více klientů, a pokud by pro každého z nich použil port 20, nemělo by tušení, který z nich odpovídá které kontrolní relaci.
- Na mé tečce jsem vytiskl FTP RFC maticová tiskárna a studoval jsem to, když mi bylo 16. Přišel jsem na to, že můžete vydat příkaz PASV na jeden server, pak příkaz PORT na druhý server s adresou IP a číslem portu z odpovědi PASV z druhého serveru a získat je poslat soubor přímo z jednoho serveru na druhý místo toho, abych si jej musel stáhnout a nahrát sám přes svůj modem s rychlostí 28,8 kb / s. Později vyšel program s názvem FXP, který to dokázal, a také jsem napsal svůj vlastní serverový software FTP pro WinNT, který odfoukl kalhoty cokoli jiného. Podívejte se sami na odpověď PASV.
- Jste zmatení. Naslouchá na portu 21, ne 20. Připojíte se k serveru na portu 21 a poté vydáte příkaz PORT, který serveru sdělí, k jaké IP a číslu portu by se měl připojit, nebo příkaz PASV, v takovém případě začne poslouchat datové připojení na dočasném portu a určuje, který port je v odpovědi. Od nabídky pasv k příkazu ftp.gnu.org: " 227 Vstup do pasivního režimu (208,118,235,20,96,222) ". Server naslouchá na portu 96 222 nebo 24 798.
- Proč to neupravit tak, aby bylo správné?
ftp(1)
stránku, jak určit port. Je ' s obvykle odděleno mezerou (nikoli dvojtečkou) nebo jako-p
možnost. ' Také se musíte ujistit, že používáte pasivní ftp, proto si nejprve přečtěte příručku.