TFTP

来自 Arch 维基

简单文件传输协议 (TFTP) 提供了一种传输文件的极简方式。它通常用作 PXE 启动的一部分,或用于更新内存有限的设备(如路由器、IP 电话和打印机)上的配置和固件。

服务器

有几种 TFTP 服务器实现,下面列出了一些。

注意: 确保不要同时启动不同的 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

安装 atftp 然后启动 atftpd.service

要修改服务参数,请编辑 /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 不支持文件上传。

参见 dnsmasq#TFTP 服务器

客户端

tftp-hpa

安装 tftp-hpa 然后尽情使用 tftp 吧!

$ tftp

atftp

软件包 atftp 包含服务器和客户端,具有交互模式和批处理模式。客户端二进制文件是 atftp,支持获取和放置文件。

curl

标准 curl 具有连接到 TFTP 服务器并通过以下方式上传文件的能力

$ curl -T FILE tftp://HOST

下载文件

$ curl -o DESTINATION tftp://HOST/file

其中 file 是相对于 TFTP 根目录的路径。