首页 > 其他分享 >FTP介绍、环境搭建、常用命令以及脚本

FTP介绍、环境搭建、常用命令以及脚本

时间:2024-09-27 16:52:31浏览次数:11  
标签:FTP 文件 file 常用命令 服务器 YES local 搭建

文章目录

介绍

FTP(File Transfer
Protocol,文件传输协议)是一种用于在网络上进行文件传输的标准网络协议。它使用客户端-服务器模型,允许用户将文件从一台计算机传输到另一台计算机,通常通过互联网。FTP支持两种模式:主动模式和被动模式。

FTP的主要特点

客户端-服务器架构:

  • 客户端发起请求,服务器响应并提供服务。
  • 通常使用两个TCP连接:控制连接和数据连接。
  • 控制连接用于发送命令和接收状态信息。
  • 数据连接用于实际的数据传输。
    身份验证:
  • 用户可以使用用户名和密码进行身份验证。
  • 支持匿名登录,允许用户以anonymous或ftp作为用户名登录,通常使用电子邮件地址作为密码。
    目录浏览与管理:
  • 用户可以列出远程目录的内容。
  • 可以创建、删除和重命名远程目录。
  • 可以改变当前工作目录。
    文件操作:
  • 上传(PUT)和下载(GET)文件。
  • 删除远程文件。
  • 查看文件属性,如大小、修改时间等。
    二进制和ASCII模式:
  • 二进制模式用于传输非文本文件(如图片、视频等),保持文件的原始格式。
  • ASCII模式用于传输文本文件,可能会转换换行符以适应不同操作系统。
    安全问题
    标准FTP是不安全的,因为用户名、密码和文件内容在传输过程中都是明文形式。
    为了解决这个问题,有更安全的替代方案,如SFTP(SSH File Transfer Protocol)和FTPS(FTP over SSL/TLS)。

FTP的工作模式

主动模式(Active Mode):
客户端向服务器发起控制连接,并告知一个临时端口。
服务器随后建立一个新的数据连接到客户端提供的临时端口。
这种模式可能被防火墙阻止,因为它需要服务器发起连接到客户端。
被动模式(Passive Mode):
客户端向服务器发起控制连接,并请求进入被动模式。
服务器响应一个临时端口号。
客户端然后发起一个新的数据连接到服务器提供的临时端口。
这种模式更适合现代网络环境,因为它只需要客户端发起连接。

服务器部署

安装

vsftpd(Very Secure FTP Daemon)是一个开源的FTP服务器软件,专为Unix-like系统设计。它以其安全性、稳定性和高效性而闻名,是许多Linux发行版中默认的FTP服务器之一

yum install vsftpd -y

在这里插入图片描述

配置防火墙

sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --reload

启动

systemctl start vsftpd

在这里插入图片描述

配置

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
  • anonymous_enable=NO:这个选项决定是否允许匿名用户登录到FTP服务器。设置为NO表示不允许匿名用户登录,只有具有有效用户名和密码的用户才能登录。
  • local_enable=YES:此选项控制本地用户(即那些在系统中有账户的用户)是否可以登录到FTP服务器。设置为YES表示允许本地用户登录。
  • write_enable=YES:这个选项决定了用户是否可以在FTP服务器上进行写操作,比如上传文件、创建目录等。如果设置为YES,则允许用户执行写操作;如果是NO,则只允许读取操作。
  • chroot_local_user=YES:chroot功能会将用户的根目录限制在他们的主目录内,这样他们就不能访问其他部分的文件系统。设置chroot_local_user=YES意味着所有本地用户都将被限制在其自己的主目录中,不能浏览或修改主目录之外的任何文件。
  • allow_writeable_chroot=YES:当chroot被启用时(通过chroot_local_user=YES),如果用户的主目录是可写的,那么默认情况下vsftpd会拒绝连接,因为这可能带来安全风险。但是,如果你确实需要让用户能够上传文件到其可写的主目录,你可以设置allow_writeable_chroot=YES来覆盖这一默认行为。请注意,这样做可能会降低系统的安全性,因此要确保你了解相关的安全影响

新增用户

useradd -m ftpuser
sudo passwd ftpuser
sudo mkdir -p /home/ftpuser/ftp/files
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp
sudo chmod -R 755 /home/ftpuser/ftp

客户端

lftp

  • lftp 是一个功能强大的文件传输程序,支持多种协议,包括 FTP、HTTP、HTTPS、FTPS、SFTP、BitTorrent 等。
  • 它提供了丰富的命令集和脚本能力,适合复杂的文件传输任务。
  • ltp 具有断点续传、镜像同步、多线程下载等功能。

sftp (SSH File Transfer Protocol)

  • sftp 是基于 SSH 协议的安全文件传输协议。
  • 它通过加密通道传输数据,确保了数据的安全性。
  • sftp 使用与 SSH 相同的身份验证机制(如密码、公钥认证)。
sudo yum install lftp -y
或者
sudo yum install ftp -y

在这里插入图片描述
测试

登陆

 lftp -u ftpuser,123456 ftp://10.168.60.166

上传文件

put /path/to/local/file

下载文件

get /path/to/local/file

退出

 exit

查看文件

nlist -R

在这里插入图片描述

常用脚本

#!/bin/bash

# 配置信息
FTP_USER="your_ftp_username"
FTP_PASS="your_ftp_password"
FTP_HOST="your_ftp_host"
LOCAL_DIR="/path/to/local/directory"
REMOTE_DIR="/path/to/remote/directory"

# 临时文件
LOCAL_LIST="/tmp/local_files.txt"
REMOTE_LIST="/tmp/remote_files.txt"

# 获取本地文件列表
find "$LOCAL_DIR" -type f > "$LOCAL_LIST"

# 使用 lftp 获取远程文件列表
lftp -c "open -u $FTP_USER,$FTP_PASS $FTP_HOST; cd $REMOTE_DIR; nlist -R > $REMOTE_LIST"

# 比较本地和远程文件列表,找出需要上传的文件
while read -r file; do
    local_file=$(basename "$file")
    remote_file=$(grep -F "$local_file" "$REMOTE_LIST")

    if [ -z "$remote_file" ]; then
        # 文件不存在于远程,上传
        echo "Uploading new file: $file"
        lftp -c "open -u $FTP_USER,$FTP_PASS $FTP_HOST; cd $REMOTE_DIR; put $file"
    else
        # 文件存在于远程,比较修改时间
        local_mtime=$(stat -c %Y "$file")
        remote_mtime=$(echo "$remote_file" | awk '{print $1}')

        if [ "$local_mtime" -gt "$remote_mtime" ]; then
            # 本地文件更新,上传
            echo "Uploading updated file: $file"
            lftp -c "open -u $FTP_USER,$FTP_PASS $FTP_HOST; cd $REMOTE_DIR; put $file"
        fi
    fi
done < "$LOCAL_LIST"

# 清理临时文件
rm -f "$LOCAL_LIST" "$REMOTE_LIST"

标签:FTP,文件,file,常用命令,服务器,YES,local,搭建
From: https://blog.csdn.net/zhangdonghuirjdd/article/details/142528664

相关文章

  • 百度智能体搭建指南-不用一行代码,教你如何创建智能体!
    今天这篇文章,为大家介绍我制作的智能体怎么制作一个智能体我们直接打开“文心智能体平台”,选择“零代码”创建一个智能体。此时,我们可以为你的智能体命名,当然你需要给他一个设定,让智能体明白自己是干嘛的。一、步骤1:定义智能体的基本属性命名:选择一个有吸引力且符合主题的名字—......
  • docker本地搭建docker-registry及ui
    version:"3.7"services:registry-ui:image:joxit/docker-registry-ui:mainrestart:alwaysports:-5080:80environment:-SINGLE_REGISTRY=true-REGISTRY_TITLE=DockerRegistryUI-DELETE_IMAGES=true......
  • KylinV10麒麟系统使用Nexus搭建YUM仓库代理
    安装Nexus(docker版本,宿主主机是啥系统无所谓)安装Nexus的服务器必须要有网,如果没网的话,前面还需要搭建NGINX反向代理下载镜像root@ubuntu:/#dockerpullsonatype/nexus3:3.38.1创建目录root@ubuntu:~#mkdir-p/data/nexus3/dataroot@ubuntu:~#chmod777/data/nexus3/启动镜像......
  • AI大模型全览 | 哪个最适合企业搭建AI知识库,让沉淀的企业知识活起来
    2023年被誉为“大模型”元年,紧接其后的2024年则是“AIGC”技术应用的风口。AIGC概念广泛,其中生成式AI技术(GenerativeAI)尤其受到关注,它通过创新性算法解决传统AI所难以触及的问题,特别是在数字内容创新上实现了质的飞跃。“AIGC+场景”模式如何帮助处理企业数据技术的进......
  • 如何用一天的时间完成网站的搭建?
    如果给你一天的时间,让你快速搭建一个企业网站,那么你应该如何做呢?从编程开发上看是不太可能的,但是可以借助一些企业网站模板完成。因为网上很多成熟和完善的网站模板能帮助用户去搭建网站。那么如何做呢?今天给大家来一个快速建站的干货。1、先要了解什么是企业网站模板,企业......
  • JMeter的CLI模式(非GUI模式)常用命令
    JMeter的CLI模式(非GUI模式)常用命令ApacheJMeter是一款强大的开源性能测试工具,它支持图形用户界面(GUI)模式和非图形用户界面(CLI,即CommandLineInterface)模式。在实际的性能测试工作中,CLI模式因其能够减少资源消耗和提高测试效率而备受青睐。本文将详细介绍JMeter在CLI模式下的常......
  • 给Java同仁单点的AI"开胃菜"--搭建一个自己的本地问答系统
    这是我参与创作者计划的第1篇文章大家好,因为对AI大模型很感兴趣,相信很多兄弟们跟我一样,所以最近花时间了解了一些,有一些总结分享给大家,希望对各位有所帮助;本文主要是目标是讲解如何在本地搭建一个简易的AI问答系统,主要用java来实现,也有一些简单的python知识;网上很多例子都......
  • Linux常用命令(持续更新)
    一、常用命令1、查看当前系统多少位getconfLONG_BITarchzy@ubuntu:~$archx86_64zy@ubuntu:~$getconfLONG_BIT642、显示当前的终端号以及登录的用户有哪些tty显示当前终端[zy@ubuntu~]$tty/dev/pts/0#tty终端#pts伪终端,也称虚拟终端who显示所有用户的......
  • SSM后端框架搭建(有图有真相)
    搭建环境修改pom.xml配置文件引入依赖<!--mysql--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.32</version></dependency><!--德鲁伊--......
  • Flink(二)搭建Maven工程实现WordCount
    开发环境编写WordCountpom文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=&qu......