使用SSH跳板机上传文件到内网的FTP服务器
最近项目的开发工作告一段落,马上要跟其他厂商进行联调了.客户提供的测试环境是在内部云的虚拟机,总共有6台服务器,包括4台windows与2台centos.
服务器只能通过一台可以通过外网SSH访问的堡垒机进行连接.
之前没有用过这种方式,网上查了一下,SSH可以通过通道进行端口映射 只要把3389端口(远程桌面RDP协议)、21端口(FTP协议)、22端口(SSH协议)建立映射就可以直接连接内部服务器进行管理。
在使用FTP服务器的时候,发现了一些问题,花了几个小时才解决,记录一下,为后来者戒!
1、FTP客户端只能使用被动模式
引用百度百科的解释:
PORT(主动)方式的连接过程是:服务器开放一个端口,通知客户端连接,服务端接受连接,建立一条命令链路。
当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了一个1024+的随机端口,你过来连接我”。于是服务器从20端口向客户端的1024+随机端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
当需要传送数据时,服务器在命令链路上用 PASV命令告诉客户端:“我打开了一个1024+的随机端口,你过来连接我”。于是客户端向服务器的1024+端口发送连接请求,建立一条数据链路来传送数据。
很简单,只要想想就明白,SSH代理只能让用户机器单向连通目标服务器,目标服务器无法反向连接用户机器。
2、要在FTP服务器限定PASV模式下使用端口范围,并加入到SSH通道
使用PASV模式时,当需要传送数据时,服务器会打开一个端口N,通过命令链路把端口N告诉客户端,让客户端发送连接请求到端口N,创建数据链路来传送数据。
那么这个FTP服务器的端口N就必须要在SSH通道中,因为客户端与FTP服务器所有通讯都是要SSH通道代理。
所以通过SSH跳板机连接到FTP服务器的通道配置如下:
FTP服务器使用的FileZilla,配置PASV模式使用端口范围,并加入防火墙入站规则
3、选择可靠的FTP客户端工具(吐槽一下FileZillaClient)
问题1,问题2都飞快的解决了,最后一个问题把我困了好久。
我开始FTP客户端也是使用FileZilla,但是连接成功后一直报错:
1 状态: 正在连接 127.0.0.1:9800...
2 状态: 连接建立,等待欢迎消息...
3 响应: 220-FileZilla Server version 0.9.46 beta
4 响应: 220-written by Tim Kosse (tim.kosse@filezilla-project.org)
5 响应: 220 Please visit http://sourceforge.net/projects/filezilla/
6 命令: USER admin
7 响应: 331 Password required for admin
8 命令: PASS ********
9 响应: 230 Logged on
10 命令: SYST
11 响应: 215 UNIX emulated by FileZilla
12 命令: FEAT
13 响应: 211-Features:
14 响应: MDTM
15 响应: REST STREAM
16 响应: SIZE
17 响应: MLST type*;size*;modify*;
18 响应: MLSD
19 响应: UTF8
20 响应: CLNT
21 响应: MFMT
22 响应: 211 End
23 状态: 已连接
24 状态: 读取目录列表...
25 命令: PWD
26 响应: 257 "/" is current directory.
27 命令: TYPE I
28 响应: 200 Type set to I
29 命令: PASV
30 响应: 227 Entering Passive Mode (XXX,XXX,XXX,66,38,74)
31 命令: MLSD
32 响应: 150 Opening data channel for directory listing of "/"
33 响应: 226 Successfully transferred "/"
34 错误: 无法建立数据连接:ETIMEDOUT - 连接尝试超时
35 错误: 读取目录列表失败
想了好久都没想明白什么问题,后来想到是不是没有连接到正确的IP地址,因为FTP客户端连接的地址是127.0.0.1:9800,通过SSH通道映射内网FTP服务器:21,
会不会客户端在创建数据连接时,直接用了FTP服务器IP??
然后在设置中看到这个:FTP/被动模式:使用服务器的外部IP地址来代替 ,潜意思把这个问题给排除了,这正是噩梦的开始,反复折腾了2个小时,一直无法定位到问题所在。
后来换了FlashFXP,果断成功
1 正在连接到 test_ftp -> IP=127.0.0.1 PORT=9800
2 已连接到 test_ftp
3 220-FileZilla Server version 0.9.46 beta
4 220-written by Tim Kosse (tim.kosse@filezilla-project.org)
5 220 Please visit http://sourceforge.net/projects/filezilla/
6 USER admin
7 331 Password required for admin
8 PASS (hidden)
9 230 Logged on
10 SYST
11 215 UNIX emulated by FileZilla
12 FEAT
13 211-Features:
14 MDTM
15 REST STREAM
16 SIZE
17 MLST type*;size*;modify*;
18 MLSD
19 UTF8
20 CLNT
21 MFMT
22 211 End
23 CLNT FlashFXP 5.0.0.3786
24 200 Don't care
25 OPTS UTF8 ON
26 202 UTF8 mode is always enabled. No need to send this command.
27 PWD
28 257 "/" is current directory.
29 PASV
30 227 Entering Passive Mode (XXX,XXX,XXX,66,38,73)
31 正在打开数据连接 IP: 127.0.0.1 端口: 9801
32 MLSD
33 150 Opening data channel for directory listing of "/"
34 226 Successfully transferred "/"
35 列表完成: 774 字节 耗时 0.18 秒 (0.8 KB/s)
页:
[1]