Điểm:0

FTP over SSH (not SFTP?) when files are on third server not SSH server

lá cờ br

I have a machine A. From it, I can SSH to machine B. Machine B can FTP to machine C. I want to download files from C, onto A. I do not have access from A to C directly.

                 Port 20 and 21
┌───┐     ┌───┐  FTP Control    ┌─────────────────┐
│   │ SSH │   ├────────────────►│                 │
│ A ├────►│ B │                 │ C - with files  │
│   │     │   ├────────────────►│     I want      │
└───┘     └───┘  FTP data       │                 │
                 Random ports   └─────────────────┘

I know there's a million questions on this site about SFTP. As far as I can tell, this is not the same as SFTP. With SFTP it seems the SSH server must be the same server that has the files to be downloaded, which is not the problem here. Is this correct? Or is there any way to do this with a simple SFTP command and some additional arguments?

Are there any easy ways to do this? The files are large, and the disk and memory on B is tiny, so if possible I'd like to stream the data straight through. (Compared to doing a two-step FTP download onto the disk of B.)

In general SSH can tunnel anything. But apparently FTP uses more than just port 20 and 21. It uses a whole bunch of random and unpredictable ports, new ones for each file operation. The possible range of such FTP ports is so large that with one client I tried, I wasn't able to just port-forward the whole range with SSH. (Note that I'm trying passive FTP, where all network connections are initiated from client the server. As opposed to active FTP where C would initiate a connection back to B, which isn't possible because of a NAT between them.)

I've tried to write a script in python hacking together the FTP standard library and a 3rd-party SSH tunnel library. It's a pretty convoluted and janky solution, that results in me openning up a new port for every new file, but never closing it. Also a recent upgrade to one library broke some dependencies so now the script doesn't work with the latest version of these libraries. I'm tempted to re-write the solution with the underlying Paramiko library. But I fear that's a deep rabbit-hole. This stuff is really fiddly. (Let me know if you need to see my attempt. I'm trying to omit it to avoid the X/Y problem.)

Is there a simpler way to do this tunneling?

I would prefer a solution with Python, but at this point I'm desperate enough to use any tool.

paladin avatar
lá cờ id
Làm thế nào về việc bạn cài đặt một máy chủ proxy ftp đảo ngược trên máy B? Máy B proxy máy chủ ftp của máy C. Máy A sử dụng ftp qua SSH tại máy B. Điều này sẽ dễ dàng hoạt động, bạn chắc chắn không cần phải "hack cùng nhau" bất cứ điều gì.
Điểm:3
lá cờ us
Rob

Giải pháp "thông thường" cho điều đó là sử dụng ứng dụng khách FTP có Vớ 5 hỗ trợ và thay vì chuyển tiếp các cổng cụ thể qua ssh, hãy định cấu hình chuyển tiếp cổng động (máy khách ssh sẽ hoạt động như máy chủ SOCKS 5)

Sau đó trên máy chủ A:

ssh -D localhost:10108 user@host-B 

Và định cấu hình máy khách FTP của bạn để sử dụng proxy SOCKS5 trên cổng đó, chẳng hạn như trong WinSCP https://winscp.net/eng/docs/ui_login_proxy hoặc chỉnh sửa ncftp tập tin cấu hình $HOME/.ncftp/tường lửa hoặc dùng

curl --socks5-hostname localhost:10108 ftp://host-c/path/to/file
falsePockets avatar
lá cờ br
Khi tôi tìm hiểu trực tuyến về proxy SOCKS, một số trang web ([1](https://surfshark.com/blog/socks-proxy), [2](https://www.makeuseof.com/tag/what- is-a-socks5-proxy/)) nói rằng lưu lượng truy cập từ A đến B không được mã hóa. Bạn có thể xác nhận rằng nếu tôi đang thực hiện SOCKS *qua SSH*, thì lưu lượng truy cập từ A đến B *được* mã hóa (và tất nhiên từ B đến C không được mã hóa).
lá cờ us
Rob
Tất cả lưu lượng trong đường hầm sẽ được mã hóa.
lá cờ us
Rob
Lưu lượng giữa ứng dụng khách ftp của bạn và proxy vớ không được mã hóa, đây là mối quan tâm bảo mật chính khi sử dụng máy chủ vớ từ xa (chạy ở đâu đó trên internet hoặc trong mạng công ty) Nhưng với chuyển tiếp cổng động ssh, máy chủ vớ đang chạy trên cùng một máy chủ, không phải ở đâu đó trong mạng công ty hoặc internet của bạn.
Điểm:2
lá cờ bd

Bạn có thể sử dụng SSH làm proxy SOCKS. Máy khách SSH trên A sẽ hoạt động như một máy chủ SOCKS5, tạo đường hầm cho tất cả các yêu cầu kết nối tới B. Bạn sẽ cần một máy khách FTP SOCKSified trên A.

Cách bạn kích hoạt chức năng proxy SOCKS tùy thuộc vào ứng dụng khách SSH được sử dụng trên A. Hãy tìm "chuyển tiếp cổng động" trong tài liệu. Đối với ứng dụng khách OpenSSH tiêu chuẩn, hãy chỉ định tùy chọn -D 1080 để nó nghe trên cổng SOCKS5 tiêu chuẩn. Đối với PuTTY, hãy chuyển đến Kết nối - SSH - Đường hầm trong hộp thoại cấu hình và thêm một cổng được chuyển tiếp với đích "Dynamic".

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.