Home FTP协议及相关工具
Post
Cancel

FTP协议及相关工具

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 sftpman 1 scp

总的来说,sftp/scp更强大一些。

This post is licensed under CC BY 4.0 by the author.