linux tftp命令

Linux tftp命令是简单文件传输协议(Trivial File Transfer Protocol)客户端工具,用于在网络上传输小文件。

提示: TFTP协议设计简单,不需要认证,通常用于局域网内设备固件更新、网络引导(PXE boot)等场景,不适合传输敏感数据。

语法格式

tftp [选项] [主机名 [端口]]

常用选项

选项 说明
-v 显示详细信息
-V 显示版本信息
-e 使用扩展的tftp模式
-c 命令 指定要执行的命令(非交互模式)
-m 模式 设置传输模式(netascii、octet)
-t 超时 设置传输超时时间(秒)
-r 文件 指定要获取的远程文件名
-l 文件 指定要上传的本地文件名
-p 使用被动模式(某些版本)
主机名 TFTP服务器地址
端口 TFTP服务器端口(默认69)
--help 显示帮助信息

TFTP交互模式常用命令

命令 说明 示例
connect 连接到TFTP服务器 connect 192.168.1.100
get 从服务器下载文件 get config.txt
put 上传文件到服务器 put firmware.bin
quit 退出tftp客户端 quit
status 显示当前状态 status
verbose 切换详细模式 verbose
mode 设置传输模式 mode binary
timeout 设置超时时间 timeout 10
rexmt 设置重传超时 rexmt 2
ascii 设置ASCII传输模式 ascii
binary 设置二进制传输模式 binary
?help 显示帮助信息 ?help

使用示例

示例1:连接TFTP服务器

# 启动tftp客户端
tftp

# 在tftp提示符下连接服务器
tftp> connect 192.168.1.100
# 或直接指定服务器
tftp 192.168.1.100

# 连接指定端口
tftp 192.168.1.100 9069

示例2:下载文件

# 连接到服务器并下载文件
tftp> connect 192.168.1.100
tftp> get config.txt
# 或使用相对路径
tftp> get /tftp/config.txt

# 下载并指定本地文件名
tftp> get remote_file.txt local_copy.txt

示例3:上传文件

# 上传文件到服务器
tftp> connect 192.168.1.100
tftp> put firmware.bin

# 上传并指定远程文件名
tftp> put local_file.bin remote_name.bin

示例4:非交互模式使用

# 直接下载文件(非交互模式)
tftp -r config.txt -g 192.168.1.100

# 直接上传文件
tftp -l firmware.bin -p 192.168.1.100

# 使用扩展模式下载
tftp -e -r boot.img -g 192.168.1.100

示例5:设置传输模式

# 设置二进制模式传输
tftp> binary
tftp> get image.jpg

# 设置ASCII模式传输文本文件
tftp> ascii
tftp> get readme.txt

# 使用命令行选项设置模式
tftp -m binary -r firmware.bin -g 192.168.1.100

示例6:配置传输参数

# 设置超时时间
tftp> timeout 30

# 设置重传超时
tftp> rexmt 5

# 显示当前状态
tftp> status
# 输出示例:
# Connected to 192.168.1.100.
# Mode: netascii  Verbose: off  Tracing: off
# Rexmt-interval: 5 seconds, Max-timeout: 25 seconds

示例7:批量传输脚本

#!/bin/bash
# 批量下载TFTP文件脚本

TFTP_SERVER="192.168.1.100"
FILES="config.txt firmware.bin logo.jpg"

for file in $FILES; do
    echo "正在下载: $file"
    tftp -r "$file" -g "$TFTP_SERVER"
    if [ -f "$file" ]; then
        echo "成功下载: $file"
    else
        echo "下载失败: $file"
    fi
done

echo "所有文件下载完成"

示例8:PXE启动环境中的使用

# 在PXE启动过程中,tftp常用于下载启动文件
# 下载内核镜像
tftp -r vmlinuz -g tftp-server.example.com

# 下载初始化内存盘
tftp -r initrd.img -g tftp-server.example.com

# 下载配置文件
tftp -r pxelinux.cfg/default -g tftp-server.example.com

TFTP传输模式

模式 说明 适用场景 命令
netascii ASCII文本模式,转换换行符 文本文件、配置文件 asciimode netascii
octet 二进制模式,原样传输 可执行文件、镜像文件 binarymode octet
注意:
  • TFTP协议不提供任何认证机制,任何人都可以访问TFTP服务器上的文件
  • TFTP使用UDP协议,传输可能不可靠,适合局域网内小文件传输
  • TFTP服务器通常需要配置正确的权限和目录访问控制
  • 默认传输模式是netascii,传输二进制文件时请使用binary模式
  • TFTP没有目录列表功能,需要知道确切的文件名
  • 文件大小受限于TFTP服务器配置(通常不超过32MB)
  • 传输过程中无法中断和恢复

TFTP服务器配置

安装TFTP服务器

# Ubuntu/Debian系统
sudo apt-get update
sudo apt-get install tftpd-hpa

# CentOS/RHEL系统
sudo yum install tftp-server

# 启动TFTP服务器(Ubuntu/Debian)
sudo systemctl start tftpd-hpa
sudo systemctl enable tftpd-hpa

# 启动TFTP服务器(CentOS/RHEL)
sudo systemctl start tftp
sudo systemctl enable tftp

配置TFTP服务器

# Ubuntu/Debian配置示例
# 编辑配置文件
sudo nano /etc/default/tftpd-hpa

# 添加或修改以下内容
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"

# 创建TFTP目录并设置权限
sudo mkdir -p /var/lib/tftpboot
sudo chown -R tftp:tftp /var/lib/tftpboot
sudo chmod -R 777 /var/lib/tftpboot

# 重启服务
sudo systemctl restart tftpd-hpa

安全注意事项

  • 仅在可信网络中使用TFTP
  • 限制TFTP服务器的访问范围(IP地址、端口)
  • 不要使用TFTP传输敏感或重要数据
  • 定期更新TFTP服务器软件
  • 监控TFTP服务器日志
  • 考虑使用更安全的替代方案(如SFTP、HTTPS)

故障排除

问题:连接被拒绝

可能原因: TFTP服务器未运行或防火墙阻止

解决:

# 检查TFTP服务状态
systemctl status tftpd-hpa
# 检查防火墙规则
sudo ufw status
# 检查端口是否开放
netstat -tuln | grep 69
问题:文件传输失败

可能原因: 权限问题或文件不存在

解决:

# 检查TFTP目录权限
ls -la /var/lib/tftpboot/
# 检查文件是否存在
ls -la /var/lib/tftpboot/文件名
问题:传输速度慢

解决: 调整传输参数

# 设置更大的超时时间
tftp> timeout 60
# 设置更大的重传超时
tftp> rexmt 10
问题:文件损坏

解决: 使用正确的传输模式

# 对于二进制文件使用binary模式
tftp> binary
# 对于文本文件使用ascii模式
tftp> ascii

常见应用场景

  • 网络设备固件更新(路由器、交换机)
  • PXE网络引导启动
  • 嵌入式系统文件传输
  • 工业控制系统(ICS)文件传输
  • 游戏机固件更新(如Xbox、PlayStation)
  • 网络监控设备配置

相关命令

  • ftp - 完整功能的文件传输协议客户端
  • sftp - SSH文件传输协议客户端
  • scp - 基于SSH的安全复制
  • wget - 从Web下载文件
  • curl - 支持多种协议的数据传输
  • rsync - 高效的文件同步工具