SSH端口转发下,连接到远程服务器的FTP

6/1/2021 1:45:40 PM

终于搞定了一个好久都悬而未决的难题,说是难题,其实就是一层窗户纸,捅破之前困难重重,捅破之后回看,也就是一层窗户纸而已。

之前在SSH登陆远程主机并同时设置端口转发的网络环境下,通过Remote Desktop连接远程Windows主机可以,SSH登陆远程Linux主机可以,通过SFTP连接远程Linux主机上部署的SFTP可以,但是唯独想通过FTP或者SFTP远程下载Windows主机上的文件时遇到了问题。

远程Windows主机上部署了FTP Server服务(使用FileZilla Server部署),防火墙也设置好了允许Application通过,SSH端口转发也设置好了本地端口到远程21端口(FTP默认端口)的转发,但是在本地尝试用FTP客户端登陆时,总是显示不了文件(这个失败的尝试过去太久了,也记不清当时的提示了,自己懒,就不去复现了,反正不能正常使用)。针对这个失败,我各种搜索,好像查到了些眉目,但最终扔没解决好(Google到的几个答案都是靠谱的,不过答案里的原理只能似懂非懂的了解,毕竟不是手把手的解决方案)于是就搁置了,后来想到FTP用不成,可以用SFTP呀,于是找Windows环境下的SFTP客户端,找到了一款叫做“Xlight”的绿色软件,小巧好用,SFTP远程访问Windows主机的文件目录正常,太棒了,不过一个月之后才发现这个SFTP功能自动失效了,原来SFTP属于软件的高级功能,试用期一个月,想要再用就得花钱买了。也找到了破解版和序列号,不过软件盗版不合规,不能这么干。于是继续探索为啥FTP就不能结合SSH端口转发来用。问题得解决就像一个发酵得过程,初期投入了精力但是无解,并不意味着毫无所得,即使获得一个小小得线索也能偶尔萦绕在脑海中思索,这不今天就思索了出来。

FTP包含两个端口:控制端口和数据端口,常说得port 21就是控制端口,如果想要结合SSH端口转发使用FTP,不仅仅要转发21端口,还需要设置数据端口的转发。这才是解决问题的关键。具体来说。

  • 远程Windows主机部署FTP Server服务(可通过FileZilla Server)
  • 在FTP Server上配置“Passive Mode”,并指定端口为7781-7789(端口范围时网上的推荐)
  • 远程Windows主机防火墙增加FileZilla的通过权限,并在inbound规则里开放7781-7789端口
  • SSH端口转发本地端口7780到远端21端口,本地7781-7789端口映射远端7781-7789端口
  • SSH登陆后(此时端口转发也已经生效),本地FTP客户端访问127.0.0.1:7780,填写server端设置好的用户名密码登陆即可。
  • 正常使用FTP服务。

以下是对自己最有帮助的2个回答:

While this question is old, there's no really comprehensive answer. So I'm adding one.

In the passive FTP mode (the most common mode nowadays), the FTP server listens on port 21 for an FTP control connection. But for all data transfers, including directory listings, it listens on an additional port. The port is picked out of a configured port range.

If you open only the 21 control port on the firewall, you get the described behavior. You can connect, but you cannot list directories or transfer files.

For details, see my article on Network configuration for passive FTP mode.

You have to go to Control Panel > System and Security > Windows Firewall > Advanced Settings > Inbound Rules > New Rule and add a new inbound rule for data port range your FTP server is using.

Firewall inbound rule ports

The port range that the FileZilla FTP server is using, is configured in Edit > Settings > Passive mode settings > Use custom port rage. You can configure a narrow range (like 10 ports), to limit a number of opened ports. You should use port numbers 1024 and above (up to 65535).

FileZilla passive custom port range




For FTP you need to forward both "FTP" and "data" ports. You forwarded only the control port, passive mode needs another port(s).

I would recommend to forward port 7780 -> 21 and port range 7781-7789 -> 7781-7789.

In the first dialog set listen port 21, in the second tick "custom port settings" and type 7781-7789.



posted @ 2021-06-01 14:25  柠檬茶多放糖  阅读(813)  评论(0编辑  收藏  举报