linux ftp 文件服务上传失败

203 阅读3分钟

启动命令:systemctl start vsftpd.service

关闭命令:systemctl stop vsftpd.service

状态命令:systemctl status vsftpd.service

重启命令:systemctl restart vsftpd.service

场景:51服务,91服务 (ftp)通过51服务链接91服务并且上传文件 注意防火墙是否关闭

注:状态码

230 - 登录成功

200 - 执行命令成功

150 - 开启数据连接端口

250 - 目录切换成功

226 - 关闭数据连接端口

ftp 登陆命令

[root@localhost attachments]# ftp 10.10.10.101
Connected to 10.10.10.101 (10.10.10.101).
220 (vsFTPd 3.0.2)
Name (10.10.10.101:root): aamsftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

查看当前路径 pwd

ftp> pwd
257 "/"

列出当前目录文件 ls

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxrwx    3 1001     0              17 Aug 19  2021 Bill
drwxrwxrwx    3 1001     0              25 Aug 19  2021 Invoice
drwxrwxrwx    3 1001     0              25 Aug 19  2021 Proof
drwxrwxrwx    3 1001     0              25 Aug 23  2021 ProofBook
drwxrwxrwx    2 1001     0              44 Nov 09  2021 recordexport
drwxrwxrwx    2 1001     0              21 Feb 24  2022 temp
drwxrwxrwx    2 0        0               6 Aug 30 09:13 test

查看本机文件 !ls

ftp> !ls
7C2A48AA200000019A792798EB553D64.pdf  dir

上传命令 put

ftp> put 7C2A48AA200000019A792798EB553D64.pdf
local: 7C2A48AA200000019A792798EB553D64.pdf remote: 7C2A48AA200000019A792798EB553D64.pdf
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
21338 bytes sent in 5e-05 secs (426760.00 Kbytes/sec)

断开连接

quit / bye /exit

在上传时候遇到如下问题

  1. ftp: connect: 没有到主机的路由.
  2. 553 Could not create file.

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,

建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,

你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。 

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,

建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,

你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。

ftp: connect: 没有到主机的路由
ftp> passive
Passive mode off.
ftp>  put /home/test/xxxx.txt
553 Could not create file.

经过很多次的尝试,可能是因为我的问题的特殊性,我在用put上传文件时,用的命令是"put /home/test/xxxx.txt",上传文件使用的是文件所在的绝对路径,后来发现就是绝对路径的问题。

解决方案:先使用命令"!ls"查看登录远程ftp服务器时的本地服务器目录,再将要上传的文件移动到该本地服务器目录,然后使用"put+文件名"直接上传文件即可,因为此时默认的上传文件目录是登录远程ftp时的本地目录。