TFTP
简单文件传输协议 (TFTP) 提供了一种传输文件的极简方式。它通常用作 PXE 启动的一部分,或用于更新内存有限的设备(如路由器、IP 电话和打印机)上的配置和固件。
服务器
有几种 TFTP 服务器实现,下面列出了一些。
got more than one socket
而失败,因为只有一个可以监听默认的 TFTP 端口 69
。tftp-hpa
安装 tftp-hpa 然后启动 tftpd.service
。
要修改服务参数,请编辑 /etc/conf.d/tftpd
。
URL 重写
此服务器包含一个有用的 URL 重写功能,通过 --map-file
选项(在某些版本中为 --mapfile
)。它允许通过正则表达式更改请求,以便服务器上的文件不必与客户端看到的视图匹配,并且即使客户端请求相同的文件,也可以向不同的客户端返回不同的文件。
通过将 --map-file /etc/tftpd.map
添加到 /etc/conf.d/tftpd
并创建一个像这样的文件来配置映射
/etc/tftpd.map
# Add the remote IP address as a folder on the front of all requests. r ^ \i/
此示例文件将导致每个 TFTP 请求都以远程 IP 地址作为前缀。例如,如果 192.168.0.1 的机器请求 "boot.bin" 并且 TFTP 服务器根目录是 /srv/tftp
,那么将返回文件 /srv/tftp/192.168.0.1/boot.bin
(如果服务器正在监听 IPv6 端口,则返回 /srv/tftp/::ffff:192.168.0.1/boot.bin
)。
可用的映射文件选项记录在 in.tftpd(8) § FILENAME REMAPPING。
调试
--verbosity 5
选项可用于打开所有调试消息。这对于诊断机器为什么无法从网络成功启动非常有用,因为调试消息列出了对文件的所有请求、是否使用了重写规则、文件从文件系统中的哪个位置读取以及请求是否成功。
无法将消息记录到 stdout/stderr,因为仅支持 syslog。这意味着可以使用 journalctl 或类似工具查看消息。
atftp
要修改服务参数,请编辑 /etc/conf.d/atftpd
。
uftpd
uftpdAUR 是一个简单的 (T)FTP 服务器,可以从命令行运行
# uftpd -n -o ftp=0,tftp=69 /tmp/tftp
选项 -o ftp=0
禁用 FTP 服务器,仅运行 TFTP。服务器默认以只读模式运行,传递 -o writable
允许客户端将文件放到服务器上。在默认端口的情况下,-o tftp=69
是冗余的,但显示了一种选择不同端口的方法。
dnsmasq
参见 dnsmasq#TFTP 服务器。
客户端
tftp-hpa
$ tftp
atftp
软件包 atftp 包含服务器和客户端,具有交互模式和批处理模式。客户端二进制文件是 atftp
,支持获取和放置文件。
curl
标准 curl 具有连接到 TFTP 服务器并通过以下方式上传文件的能力
$ curl -T FILE tftp://HOST
下载文件
$ curl -o DESTINATION tftp://HOST/file
其中 file
是相对于 TFTP 根目录的路径。