标准FTP登录(不安全,明文传输)
这种方式是FTP最原始的登录方法,但因为它用户名和密码都是明文传输,现在已不推荐用于生产环境,仅用于学习或内部网络。

交互式命令行登录
这是最基本、最常用的方式,可以一步步看到服务器的反馈。
命令格式:
ftp [hostname_or_IP]
操作步骤:
-
连接到FTP服务器
(图片来源网络,侵删)ftp ftp.example.com # 或者使用IP地址 # ftp 192.168.1.100
连接成功后,服务器通常会返回欢迎信息,并提示你输入用户名。
-
输入用户名
Name (ftp.example.com:user): your_username输入你在FTP服务器上注册的用户名,然后按回车。
-
输入密码
(图片来源网络,侵删)Password:输入你的密码,输入时,为了安全,屏幕上不会显示任何字符(光标也不会移动),输入完成后直接按回车。
-
登录成功 登录成功后,你会看到类似
230 Login successful.的提示符,并进入ftp>命令行模式,此时你就可以使用各种FTP命令来传输文件了。
完整示例:
$ ftp ftp.example.com Connected to ftp.example.com. 220-FileZilla Server version 0.9.60 beta 220 Please visit https://filezilla-project.org/ Name (ftp.example.com:my_local_user): my_ftp_user 331 Password required for my_ftp_user Password: 230 Logged on Remote system type is UNIX. Using binary mode to transfer files. ftp>
命令行一键登录(非交互式)
如果你在脚本中需要自动登录FTP,可以使用 ftp 命令的 -n 选项(禁止自动登录)和 -i 选项(关闭多文件传输时的交互式提示),并通过输入重定向 (<<EOF 或 ) 来提供用户名和密码。
使用 here document (推荐)
ftp -n -i <<EOF open ftp.example.com user your_username your_password # 在这里可以添加其他FTP命令, # put local_file.txt remote_file.txt # get remote_file.txt bye EOF
使用管道
echo -e "open ftp.example.com\nuser your_username your_password\nls\nbye" | ftp -n -i
注意:将密码直接写在脚本中是非常危险的做法,容易泄露,在生产环境中,应考虑使用更安全的方式,如SSH密钥对或配置文件。
安全FTP登录(推荐)
为了解决标准FTP不安全的问题,发展出了多种加密FTP协议。
SFTP (SSH File Transfer Protocol)
重要提示:SFTP 不是 FTP 的安全版本!它完全是一个不同的协议,运行在SSH(Secure Shell)之上,使用端口22。
SFTP是现在最常用的安全文件传输方式,因为它加密了整个会话,包括用户名、密码和所有传输的数据。
登录命令:
SFTP使用 sftp 命令,其交互式界面和FTP非常相似。
sftp [username@]hostname
操作步骤:
- 连接
sftp my_ftp_user@ftp.example.com
- 输入密码 和SSH登录一样,输入你的密码。
- 进入SFTP命令行
登录成功后,你会看到
sftp>提示符。
完整示例:
$ sftp my_ftp_user@ftp.example.com my_ftp_user@ftp.example.com's password: Connected to ftp.example.com. sftp> ls sftp> get remote_file.txt Fetching /remote/path/remote_file.txt to local_file.txt sftp> put local_file.txt Uploading local_file.txt to /remote/path/local_file.txt sftp> bye
FTPS (FTP over SSL/TLS)
FTPS是FTP协议的安全扩展,它通过SSL/TLS协议对FTP会话进行加密,它有两种模式:
- 显式模式 (Explicit FTPS):客户端先发送
AUTH TLS命令,服务器同意后才切换到加密连接,端口通常是21,这是目前推荐的标准模式。 - 隐式模式 (Implicit FTPS):客户端一连接,服务器就立即开始加密连接,端口通常是990,这是一种较旧的模式。
登录命令(使用 lftp 或 curl 等工具)
Linux系统自带的 ftp 命令通常不支持FTPS,但功能更强大的 lftp 工具支持。
使用 lftp 进行显式FTPS登录:
lftp ftps://ftp.example.com # 然后在lftp交互界面中 lftp ftps://ftp.example.com> user your_username your_password
或者直接在一行中完成:
lftp -u your_username,your_password ftps://ftp.example.com
使用 curl 进行FTPS文件上传/下载:
# 上传文件 curl -T local_file.txt --user your_username:your_password ftps://ftp.example.com/remote_dir/ # 下载文件 curl -O --user your_username:your_password ftps://ftp.example.com/remote_dir/remote_file.txt
常用FTP/SFTP命令一览表(登录后使用)
| 命令 | 描述 | 示例 |
|---|---|---|
ls |
列出当前目录下的文件和文件夹 | ls |
cd |
切换远程目录 | cd /public_html |
lcd |
切换本地目录(在客户端上) | lcd /home/user/my_files |
get |
从远程服务器下载一个文件 | get remote_file.txt |
mget |
从远程服务器下载多个文件(支持通配符) | mget *.jpg |
put |
上传一个本地文件到远程服务器 | put local_file.txt |
mput |
上传多个本地文件到远程服务器 | mput *.log |
mkdir |
在远程服务器上创建一个新目录 | mkdir new_folder |
delete |
删除远程服务器上的一个文件 | delete old_file.txt |
rmdir |
删除远程服务器上的一个空目录 | mdir empty_folder |
pwd |
显示当前远程工作目录 | pwd |
| 执行本地shell命令 | !ls (查看本地目录) |
|
help |
显示所有可用命令的帮助 | help |
bye 或 quit |
退出FTP/SFTP会话 | bye |
总结与建议
| 特性 | FTP (标准) | SFTP | FTPS |
|---|---|---|---|
| 协议 | FTP | SSH | FTP over SSL/TLS |
| 端口 | 21 | 22 | 21 (显式) / 990 (隐式) |
| 安全性 | 低 (明文传输) | 高 (加密整个会话) | 高 (加密会话) |
| 易用性 | 命令简单,但功能有限 | 命令与FTP相似,功能强大 | 需要特殊客户端支持 |
| 推荐度 | 不推荐 | 强烈推荐 | 推荐 |
最终建议:
- 强烈推荐使用 SFTP,它是最安全、最现代、功能最全的选择,也是Linux/Unix系统管理员的标配工具。
- 如果你的服务器只支持传统的FTP,请立即联系管理员要求升级到SFTP或FTPS,以保护你的数据安全。
- 对于Windows用户,可以使用图形化工具如 FileZilla,它同时支持FTP、SFTP和FTPS,操作直观且安全。
