点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
什么是FTP服务器
如果想要从一台服务器上传输一个文件,通常可以使用scp命令来进行远程拷贝和上传,但是这样操作需要知道目标文件的绝对位置,在频繁的进行文件的上传和下载时,会造成很多的麻烦。
文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP。
FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。
由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。默认情况下FTP协议使用TCP端口中的 20 和 21这两个端口,其中 20 用于传输数据,21 用于传输控制信息。
操作FTP
2.1 安装
安装vsftpd软件:
#yum install vsftpd -y
复制
查看vsftpd的软件信息:
#rpm -qi vsftpd
复制

2.2 启动
启动vsftpd服务:
#systemctl start vsftpd.service(centos 7)
#service vsftpd start(centos 6)复制
确认是否启动成功:
#ps -ef |grep ftp
复制
查看端口号:
#netstat -anplut | grep vsftpd
复制
2.3 登录
下载客户端工具 ftp 和 lftp:
# yum install ftp lftp -y
复制

登录ftp(vsftpd 使用的用户名和密码就是linux系统里面使用分用户和密码,不需要单独新建):
#
lftp -u 用户名,密码 ip地址
查看lftp常用命令
#help复制

!ls
查看本地目录内容。
lcd命令
在本地切换目录。

put命令
上传文件到ftp服务器·。

mirror命令
下载文件夹到本地。

FTP配置文件
ftp服务的配置文件路径/etc/ftp/vsftpd, 一般下载vsftpd服务后有四个重要的配置文件。
vsftpd.conf:主配置文件,包含一些常用配置。
是否允许匿名用户ftp登录:YES代表允许;NO不允许
anonymous_enable=YES
是否允许本地登录
local_enable=YES
是否有写的权利
write_enable=YES
日志文件位置
xferlog_file=/var/log/xferlog 采用标准的日志格式。
ftpusers
ftp黑名单,如果想让一个用户登录不了ftp服务,可以将用户加入黑名单。
user_list
黑名单或白名单,只有 userlist_deny=NO的时候,在这个文件里面所有的用户都可以使用ftp服务,这个时候文件就从黑名单变成白名单。
3.1 限制用户只能在自己家目录操作
修改vsftpd.conf配置文件:
#对本地用户限制在自己的家目录里
chroot_local_user=YES
#启用限制名单
chroot_list_enable=YES
(default follows)
# 具体的名单路径,这个名单的用户不受限制,可以随意切换目录
chroot_list_file=/etc/vsftpd/chroot_list
#这个目录没有,需要自己新建。复制
3.2 SFTP
因为 SFTP 是基于 SSH 协议的,所以默认的身份认证方法与 SSH 协议保持一致。通常我们使用 SSH Key 来进行连接,如果你已经可以使用 SSH 连接到远程服务器上,那么可以使用以下命令来连接 SFTP:
sftp user_name@remote_server_address[:path]
复制
如果远程服务器自定义了连接的端口,可以使用 -P 参数:
sftp -P remote_port user_name@remote_server_address[:path]
复制
连接成功后将进入一个 SFTP 的解释器,可以发现命令行提示符变成了 sftp>,使用 exit 命令可以退出连接。
如果连接地址存在 path 并且 path 不是一个目录,那么 SFTP 会直接从服务器端取回这个文件:
sftp> mkdir anotherDirectory
复制
以上的命令都是用来操作远程服务器的,如果想要操作本地目录呢?只需要在每个命令前添加 l 即可,例如显示本地操作目录下的文件:
sftp> lls
localFiles复制
使用 ! 可以直接运行 Shell 中的指令:
sftp> !df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s1 466Gi 360Gi 101Gi 79% 3642919 9223372036851132888 0%
devfs 336Ki 336Ki 0Bi 100% 1162 0 100% dev
/dev/disk1s4 466Gi 4.0Gi 101Gi 4% 5 9223372036854775802 0% private/var/vm
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% net
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% home复制
传输文件
4.1 从远程服务器拉取文件
使用 get 命令可以从远程服务器拉取文件到本地:
sftp> get remoteFile [newName]
复制
如果不指定 newName,将使用和远程服务器相同的文件名。
使用 -r 参数可以拉取整个目录:
sftp> get -r remoteDirectory
复制
4.2 从本地上传文件到服务器
使用 put 命令可以从本地上传文件到服务器:
sftp> put localFile
复制
同样的,可以使用 -r 参数来上传整个目录,但是有一点要注意,如果服务器上不存在这个目录需要首先新建:
sftp> mkdir folderName
sftp> put -r folderName复制

本文作者:朱凯方(上海新炬中北团队)
本文来源:“IT那活儿”公众号
