如何在debian中安装和配置tftpd
tftp服务类似FTP服务,但它短小精干,仅适合于小文件的传输,所以大多数网络设备都选择tftp作为配置文件备份、firmware升级等操作的默认传输方式。
tftp采用的是C/S架构,由服务端和客户端组成,其中网络设备就是客户端。
1. tftp服务端
tftp服务端有多个选择,debian的官方文档推荐的是tftpd-hpa,那我们就用它吧。
# aptitude install tftpd-hpa
1.1 启动方式
有两种启动方式:
daemon
这种方式适用于使用频率高的场景,不论是否有tftp客户端连接,tftpd进程都将常驻内存,一直监听
69
端口,这种方式的优点是响应迅速;xinetd
该方式适用于偶尔使用的场景,由xinetd监听69
端口,tftpd进程处于休眠状态,只有当tftp客户端尝试连接69
端口的时候,才由xinetd唤醒tftpd进程,这种方式比较节省资源,并且安全性高,当然响应速度就稍慢一些;当一段时间内没有tftp客户端活动,xinetd便会终止tftpd进程。
下面是xinetd方式的一个完整历程:
xinetd监听69
端口
root@netmgmt-deb6:/etc/xinetd.d# lsof -i -P | grep 69
xinetd 1720 root 5u IPv4 7516 0t0 UDP *:69
当tftp客户端发起一个连接,准备上传文件时,xinet会激活tftpd进程进行监听
root@netmgmt-deb6:/etc/xinetd.d# lsof -i -P | grep 69
xinetd 1720 root 5u IPv4 7516 0t0 UDP *:69
in.tftpd 1747 root 0u IPv4 7516 0t0 UDP *:69
过一段时间后,xinetd发现没有tftp客户端的活动,则终止tftpd进程
root@netmgmt-deb6:/etc/xinetd.d# lsof -i -P | grep 69
xinetd 1720 root 5u IPv4 7516 0t0 UDP *:69
建议选择使用xinetd方式启用tftpd。
1.2 配置(xinetd方式)
在Debian中,tftpd-hpa默认以daemon方式启动,所以需要先禁用该特性:
# vim /etc/default/tftp-hpa
...
RUN_DAEMON="no"
...
接着添加/etc/xinetd.d/tftpd
# vim /etc/xinetd.d/tftpd
service tftp
{
protocol = udp
socket_type = dgram
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -c -s /srv/tftp
disable = no
}
然后修改/srv/tftp的属性
# chown nobody:nogroup /srv/tftp
# chmod 755 /srv/tftp
/srv/tftp是tftp-hpa默认目录,为了方便起见,我放大了该目录的读写权限,读者可以根据自己的情况自行修改
最后重启xinetd:/etc/init.d/xinetd restart
至此,完成了tftpd服务端的安装和配置。有了服务端,接下来安装客户端方便调试。
2. tftp客户端
# aptitude install tftp
测试一下:
netmgmt-deb6:/home# touch foo
netmgmt-deb6:/home# touch /srv/tftp/bar
netmgmt-deb6:/home# tftp localhost
tftp> put foo # 上传
tftp> get bar # 下载
3. troubleshooting
1、H3C 3600上传文件失败
sw_CORE>tftp config xx xx
File will be transferred in binary mode.
Sending file to remote tftp server. Please wait...
Can't find source file .
原因:tftpd进程尚未启动。
2、tftp客户端上传文件时出现Transfer timed out
原因:tftpd进程尚未启动。
3、tftpd服务起不来
原因:/etc/xinetd.d/tftpd中的语法有误
# cat /etc/xinetd.d/tftpd
service tftpd
{
...
}
将service tftp
误写成service tftpd
,导致in.tftpd无法正常启动
4. TIPS
- 当xinetd停掉的时候,in.tftpd进程不会自动停止,还需要
/etc/init.d/tftpd stop