FTP指文件传输协议,狭义上特指最早的FTP工具,广义上就是文件传输协议,因为发展到现在,已有几款ftp工具了。 在Linux系统中,FTP、TFTP和SFTP都是用于文件传输的协议,它们在功能上相似,但在安全性,使用方式上有所不同。
FTP(文件传输协议)
FTP最早是在1971年由MIT开发出来的,最初作为ARPANET(互联网的前身)的一部分。随着时间的推移,FTP逐渐成为互联网上文件传输的主要协议,并在1985年被标准化为RFC 959。
FTP是一种标准的网络协议,用于在客户端和服务器之间进行文件传输。它使用明文传输,并且没有内置的加密机制。 FTP支持交互式命令行和GUI工具,可以在客户端和服务器之间双向传输文件。 FTP通常使用21号端口进行控制连接和20号端口进行数据连接。
TFTP(简单文件传输协议)
TFTP由Bill Joy在1980年代早期开发,最初作为UNIX系统的一部分。它被设计为一种轻量级的文件传输协议,用于在计算机之间传输小文件,尤其是用于无盘系统或嵌入式设备的启动和配置。TFTP的规范最初发布于1981年,并在1992年被标准化为RFC 1350。
TFTP是一种简化的文件传输协议,通常用于无盘系统或嵌入式设备中。与FTP不同,TFTP没有身份验证和安全特性(重要特点!!),并且使用UDP协议进行传输。TFTP主要用于固件更新和配置文件的传输。它使用69号端口进行传输,速度较快但不够安全。
SFTP(SSH文件传输协议)
SFTP是由SSH Communications Security开发的一种安全文件传输协议,旨在替代不安全的FTP协议。SFTP的第一个版本在2001年发布,它基于SSH协议的加密和身份验证功能,并提供了安全的文件传输。SFTP并不是FTP的扩展,而是一个全新的协议实现。
SFTP是通过SSH(Secure Shell)协议进行文件传输的安全替代协议。它通过SSH的加密通道进行传输,提供了身份验证和加密功能,使数据传输更加安全。SFTP支持交互式命令行和GUI工具,并且可以在客户端和服务器之间进行双向传输。SFTP使用22号端口进行传输。
工具使用
ftp
可以使用命令行工具,需要ftp
客户端和ftpd
服务器端,这个工具现在虽然仍可以使用,但基本不用,使用sftp作为替代了。
tftp
这个工具因为比较轻量,在嵌入式设备中使用较多。当然,一般的x86设备肯定也是可以使用的,只是x86上可能使用sftp更多。尽管机器不同,但使用方式是一样的。
tftp可以选择安装tftp
工具,现在多了一个选项tftp-hpa
工具,tftpd-hpa是基于原始tftpd的一个改进和扩展版本,它提供了更多功能和配置选项。tftpd-hpa支持更高级的访问控制、日志记录、并发连接管理以及配置文件的灵活性。
补充:tftpd工具和tftpd-hpa工具的配置有些差异的,在大多数Linux发行版中,tftpd服务器通常依赖xinetd(Extended Internet Services Daemon)来进行服务管理。xinetd是一个基于事件的系统守护进程,负责管理并提供各种网络服务,包括TFTP。 而tftpd-hpa可以直接作为一个独立的守护进程运行,而可以不需要依赖xinetd。同时,二者的配置文件有些差异,位置也不同。
tftpd服务器端参考
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 安装
sudo apt install xinetd tftpd
# 查看xinetd服务运行状态,确保正常运行
systemctl status xinetd.service
# 准备好tftpd的根目录,并放点文件
mkdir -p /tftpd_root
chmod -R 777 /tftpd_root
# 配置tftpd,共享刚创建的目录
# 编辑文件/etc/xinetd.d/tftp,写入以下内容
sudo vim /etc/xinetd.d/tftp
### start ###
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpd_root -c
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
### end ###
### 保存退出
# 重启服务生效
sudo systemctl restart xinetd.service
# 可以查看69端口,可以看到,已启动
sudo ss -plun | grep 69
UNCONN 0 0 0.0.0.0:69 0.0.0.0:* users:(("xinetd",pid=14901,fd=5))
# 有防火墙运行的,需要进一步开启udp 69端口,这里没有
tftpd-hpa服务器端参考
1
2
3
4
5
6
7
8
9
10
11
# 安装
sudo apt install tftpd-hpa
# 配置
sudo vim /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"
tftpd-hpa是有独立服务的,tftpd-hpa.service
,使用配置相对简单。
tftp客户端
无论安装tftp还是tftp-hpa,客户端工具的命令都是tftp。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装客户端程序
sudo apt install tftp
# 或者安装 tftp-hpa
sudo apt install tftp-hpa
# 连接tftp服务器
tftp [host]
# 之后在tftp-cli中下载或上传文件,支持目录,可以 <path>/<file>
# get file
# get remotefile localfile
# get file1 file2 file3...
# put file
# put localfile remotefile
# put file1 file2 file3... remote-directory
最后,建议安装和使用tftp的hpa版本的程序。
sftp
安装相关工具openssh-client openssh-server openssh-sftp-server
,即常用的ssh服务器和客户端,并启动即可。
sftp服务器端
启动ssh服务器即可。
sftp客户端
1
2
3
4
5
6
7
8
9
10
11
12
13
# sftp 交互式工具
sftp [username]@[host]
# 键入help查看更多命令,基本传输命令也是get和put,但支持更多选项。
# 另外,它还有本地端和远端的概念。一些l开头的命令是在本地执行的,如lcd,切换本地目录,而cd命令,则是切换远端的目录
# scp 命令行工具,可以直接在命令行双向传输文件,就是非交互式,
# 如将远端的 ~/test.txt 文件传输到本地 ./ ,
scp [username]@[host]:~/test.txt ./
# 把本地的文件拷贝到远端
scp ./test.txt [username]@[host]:~/test.txt
# 递归传输目录
scp -r username@server_ip:remote_directory/ local_directory/
更多选项参考man手册,man 1 sftp
和 man 1 scp
。
总的来说,sftp/scp更强大一些。