Puncte:0

FTP prin SSH (nu SFTP?) atunci când fișierele sunt pe al treilea server, nu pe serverul SSH

drapel br

Am o mașină A. Din el, pot SSH la mașina B. Mașina B poate FTP la mașina C. Vreau să descarc fișiere din C, pe A. Nu am acces direct de la A la C.

                 Portul 20 și 21
âââââ âââââ Control FTP ââââââ âââââââââââââ
â â SSH â ââââââââââââ†ââââºâ â
â A ââââââºâ B â â C - cu fișiere â
â â â ââââââââââââ†ââââºâ vreau â
âââââ âââââ Date FTP â â
                 Porturi aleatorii âââââââââââââââââââââââââ âââ

Știu că există un milion de întrebări pe acest site despre SFTP. Din cate pot sa spun, acesta nu este același lucru cu SFTP. Cu SFTP se pare că serverul SSH trebuie să fie același server care are fișierele de descărcat, ceea ce nu este problema aici. Este corect? Sau există vreo modalitate de a face acest lucru cu o simplă comandă SFTP și câteva argumente suplimentare?

Există modalități ușoare de a face acest lucru? Fișierele sunt mari, iar discul și memoria de pe B sunt mici, așa că, dacă este posibil, aș dori să transmit datele direct. (Comparativ cu descărcarea FTP în doi pași pe discul lui B.)

În general, SSH poate tunel orice. Dar se pare că FTP folosește mai mult decât porturile 20 și 21. Folosește o grămadă de porturi aleatorii și imprevizibile, altele noi pentru fiecare operațiune de fișier. Gama posibilă a unor astfel de porturi FTP este atât de mare încât, cu un client pe care l-am încercat, nu am reușit să port-forward întreaga gamă cu SSH. (Rețineți că încerc pasiv FTP, unde toate conexiunile de rețea sunt inițiate de la client-server. Spre deosebire de activ FTP unde C ar iniția o conexiune înapoi la B, ceea ce nu este posibil din cauza unui NAT între ei.)

Am încercat să scriu un script în python, piratand împreună Bibliotecă standard FTP și o terță parte Biblioteca tunel SSH. Este o soluție destul de complicată și neplăcută, care are ca rezultat deschiderea unui nou port pentru fiecare fișier nou, dar niciodată să nu-l închid. De asemenea, o actualizare recentă la o bibliotecă a rupt unele dependențe, așa că acum scriptul nu funcționează cu cea mai recentă versiune a acestor biblioteci. Sunt tentat să rescriu soluția cu subiacentul Paramiko bibliotecă. Dar mă tem că este o groapă adâncă. Chestiile astea sunt cu adevărat neplăcute. (Anunțați-mă dacă trebuie să vedeți încercarea mea. Încerc să o omit pentru a evita problema X/Y.)

Există o modalitate mai simplă de a face acest tunel?

Aș prefera o soluție cu Python, dar în acest moment sunt suficient de disperat să folosesc orice instrument.

paladin avatar
drapel id
Ce zici să instalezi un server reverse-ftp-proxy pe mașina B? Mașina B oferă proxy serverul ftp al mașinii C. Mașina A folosește ftp peste SSH la mașina B. Acest lucru ar trebui să funcționeze cu ușurință, cu siguranță nu trebuie să „pirați” nimic.
Puncte:3
drapel us
Rob

Soluția „convențională” pentru aceasta este utilizarea unui client FTP care are SOSETI 5 suport și, în loc să redirecționați anumite porturi prin ssh, configurați redirecționarea dinamică a portului (clientul ssh va acționa ca server SOCKS 5)

Apoi pe gazda A:

ssh -D gazdă locală:10108 utilizator@gazdă-B 

Și configurați-vă clientul FTP să folosească un proxy SOCKS5 pe acel port, de exemplu în WinSCP https://winscp.net/eng/docs/ui_login_proxy sau editați ncftp Fișier de configurare $HOME/.ncftp/firewall sau utilizați

curl --socks5-hostname localhost:10108 ftp://host-c/path/to/file
falsePockets avatar
drapel br
Când mă uit online pentru a afla despre proxy-urile SOCKS, unele site-uri ([1](https://surfshark.com/blog/socks-proxy), [2](https://www.makeuseof.com/tag/what- is-a-socks5-proxy/)) spun că traficul de la A la B este necriptat. Puteți confirma că, dacă fac SOCKS *pe SSH*, atunci traficul de la A la B *este* criptat (și desigur de la B la C este necriptat).
drapel us
Rob
Tot traficul din tunel va fi criptat.
drapel us
Rob
Traficul dintre clientul dvs. ftp și proxy-ul socks nu este criptat, ceea ce este principala problemă de securitate cu utilizarea unui server de șosete la distanță (care rulează undeva pe internet sau într-o rețea corporativă) Dar cu redirecționarea portului dinamic ssh, serverul socks rulează pe aceeași gazdă, nu undeva în rețeaua dvs. corporativă sau pe internet.
Puncte:2
drapel bd

Puteți utiliza SSH ca proxy SOCKS. Clientul SSH de pe A va funcționa ca un server SOCKS5, tunelând toate solicitările de conexiune către B. Veți avea nevoie de un client FTP SOCKSified pe A.

Modul în care activați funcționalitatea proxy SOCKS depinde de clientul SSH utilizat pe A. Căutați „redirecționare dinamică a portului” în documentație. Pentru clientul standard OpenSSH, specificați opțiunea -D 1080 pentru a-l asculta pe portul standard SOCKS5. Pentru PuTTY, accesați Conexiune - SSH - Tuneluri în dialogul de configurare și adăugați un port redirecționat cu destinația „Dynamic”.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.