TFTP
简单文件传输协议 (TFTP) 提供了一种最小化的文件传输方式。它通常用作 PXE 引导的一部分,或者用于更新内存有限的设备(如路由器、IP电话和打印机)的配置和固件。
服务器
有几种 TFTP 服务器实现,其中一些列在下面。
got more than one socket”的错误而失败,因为只有一个可以监听默认的 TFTP 端口 69。tftp-hpa
安装 tftp-hpa,然后 启动 tftpd.service。
要修改服务参数,请编辑 /etc/conf.d/tftpd。
URL重写
该服务器通过 --map-file 选项(某些版本中为 --mapfile)提供了一个有用的 URL 重写功能。它允许通过正则表达式修改请求,因此服务器上的文件不必与客户端看到的文件视图匹配,并且即使不同客户端请求同一个文件,也可以返回不同的文件。
通过将 --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 地址作为前缀。例如,如果 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
客户端
tftp-hpa
$ tftp
atftp
软件包 atftp 包含服务器和客户端,支持交互式和批量模式。客户端二进制文件是 atftp,支持获取和上传文件。
curl
标准的 curl 可以通过以下方式连接到 TFTP 服务器并上传文件:
$ curl -T FILE tftp://HOST
下载文件
$ curl -o DESTINATION tftp://HOST/file
其中 file 是相对于 TFTP 根目录的。