Dator A (antas att ip är 44.44.44.44) kan ftp värden 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.
Dator B (min lokala dator) kan inte ftp-värden 130.89.148.12. Låt oss bygga en ssh-tunnel med ssh-kommandot på detta sätt:
ssh -L -f -N localhost:2121:130.89.148.12:21 [email protected]
ssh-tunneln mellan min lokala dator och dator A (44.44.44.44) anslöts efter lösenord för att logga in på 44.44.44.44.
Sedan för att mata in kommandot på min lokala PC-konsol:
ftp localhost:2121 ftp: localhost:2121: Name or service not known
Vad är det med min ssh-tunnel?
Tänk att chexum, rätt ftp-kommando är ftp localhost 2121 Men nytt problem.
Kommentarer
Svar
Din inställning tar inte hänsyn till det i motsats till andra vanliga protokoll använder FTP både port 20 och port 21 över TCP som standard .
Termen passiv hänvisar till att protokollet litet beter sig än de ursprungliga implementeringarna.
Här är en länk:
http://www.slacksite.com/other/ftp.html
Port 20 / TCP används för data och port 21 / TCP för kommandon .
I Unix kan också privilegierade portar < 1024 endast bindas av root.
Så gör du antingen:
sudo ssh -f -N -L 20:130.89.148.12:20 -L 21:130.89.148.12:21 [email protected]
På det här sättet ger du ingen extra port och använder den bara med
ftp -p localhost
eller om du inte har root:
ssh -f -N -L 2120:130.89.148.12:20 -L 2121:130.89.148.12:21 [email protected]
och sedan använda:
ftp -p -P 2121 localhost
Från man ftp http://linux.die.net/man/1/ftp
-p passivt läge
-P-port
eller om det finns en version av ftp
som inte stöder -P
(Debian 9 / Ubuntu 16.04):
ftp -p localhost 2121
Jag kommer också att lämna en länk till ”SSH-tunnlar lokal och fjärrport vidarebefordran förklaras”
Slutligen skulle jag rekommendera att du inte använder root i fjärrsystemet för ssh-anslutningar. root är ett mycket kraftfullt konto och bör endast reserveras för systemadministration.
Dessutom är ssh fjärrinloggning som root inaktiverad som standard i många moderna Linux.
Varför är rootinloggning via SSH så dålig att alla rekommenderar att inaktivera det?
Kommentarer
- Vad? Dataanslutningen använder inte port 20; den använder en slumpmässig port > 1024. Även
ftp
verkar inte ha ett-P
-alternativ, åtminstone inte på Ubuntu 16.04. Således kan du inte vidarebefordra ftp med ssh eftersom du inte ' inte vet vilken slumpmässig port som kommer att väljas när dataanslutningen upprättas (och du får en annan för varje fil som överförs eller varje när duls
). - Nej, servern lyssnar också på en kortare port. Det måste eftersom det kan betjäna flera klienter och om det använde port 20 för var och en av dem, skulle det inte ha någon aning vilken som motsvarade vilken kontrollsession.
- Jag skrev ut FTP RFC på min punkt matrisskrivare och studerade den när jag var 16. Jag tänkte att du kan utfärda ett PASV-kommando till en server, sedan ett PORT-kommando till den andra servern med IP-adress och portnummer från PASV-svaret från den andra servern och få dem att skicka filen direkt från en server till en annan istället för att behöva ladda ner och ladda upp den själv över mitt 28,8 kbps modem. Senare kom ett program som heter FXP som kunde göra det, och jag skrev också min egen FTP-serverprogramvara för WinNT som sprängde byxorna av allt annat. Gå och titta på ett PASV-svar själv.
- Du är förvirrad. Den lyssnar på port 21, inte 20. Du ansluter till servern på port 21 och utfärdar sedan antingen ett PORT-kommando och berättar servern vilken IP och portnummer den ska ansluta till, eller ett PASV-kommando, i vilket fall det börjar lyssna på dataanslutningen på en kortare port och anger vilken port som finns i svaret. Från ett offertpas-kommando till ftp.gnu.org: " 227 Gå in i passivt läge (208,118,235,20,96,222) ". Observera att servern lyssnar på port 96,222 eller 24,798.
- Varför inte redigera den så att den är korrekt?
ftp(1)
manpage om hur du anger en port. Det ' är vanligtvis åtskilt med ett mellanslag (inte ett kolon) eller som ett alternativ-p
. Du ' Jag måste också se till att använda passiv ftp, så kolla manualen först.