ubuntu 中使用 lftp 命令行工具传输文件

文章目录

一、检查传输协议和端口

  1. 安装nmapnmap是一个非常通用的扫描器,可以跨越几乎所有 IP 网络环境使用,支持多平台、多协议,几乎能完成整个网络探测、诊断和安全审计的流程。

    bash 复制代码
    sudo apt install nmap 
    方面 特点总结 详情说明
    协议通用性 核心协议支持广泛 Nmap 使用原始 IP 数据包(Raw IP Packets)来工作,支持 TCP、UDP、ICMP 等所有主流网络协议,使其能够探测各种基于 IP 的网络服务。
    环境通用性 适用于各种规模和类型网络 无论是扫描单个主机、内部局域网 (LAN) 还是跨越互联网的大型网络 (WAN),Nmap 都能胜任。它具备穿透(或规避)防火墙、路由器和入侵检测系统 (IDS) 的高级扫描技术。
    系统通用性 支持主流操作系统 Nmap 软件本身是跨平台的,有适用于 Linux、Windows、macOS 以及各种 BSD 和 Unix 系统的版本,可以在几乎任何主机上执行扫描任务。
    功能通用性 不仅仅是端口扫描 它的功能涵盖主机发现、端口状态识别、服务及版本探测、操作系统指纹识别和脚本扫描(NSE),使其成为网络管理员和安全审计人员的通用工具。
  2. 扫描目标 IP 地址,以发现主机是否在线,开放了哪些端口以及运行着什么服务,确保目标主机支持相关的传输协议。

    bash 复制代码
    nmap ip   # 目标主机 ip

二、使用 lftp 工具传输文件

  1. 在 Linux 或 Unix 的终端环境下,通常选择lftp工具传输文件,尤其是在涉及到自动化、高可靠性、目录同步或性能优化的场景中。它的一大优势是操作统一,无论是 ftp://ftps:// 还是 sftp://,都是使用同一套lftp命令(如 mirror, get, put),无需切换工具,这带来了极大的便利性。

    bash 复制代码
    sudo apt install lftp
  2. 选择对应的协议(ftp://ftps://sftp:// 等),使用 URL 指定用户名登录(交互输入密码)。

    bash 复制代码
    lftp ftp://username@host_ip
  3. 登录成功后,终端提示符变成如下格式。

    bash 复制代码
    lftp username@host_ip:~>
  4. 远程操作命令 (不加!前缀)

    功能 命令示例 说明
    列出目录 lsls -l 查看远程目录文件
    切换目录 cd /remote/dir 切换远程目录
    查看远程路径 pwd 当前远程目录
    创建远程目录 mkdir newfolder 在远程创建目录
    删除远程文件 rm file.txt 删除远程文件
    上传单文件 put localfile.txt 上传到当前远程目录
    下载单文件 get remotefile.txt 下载到当前本地目录
    上传并改名 put localfile.txt -o remotefile.txt 上传更名 / 路径
    下载并改名 get remotefile.txt -o localfile.txt 下载更名 / 路径
    上传目录(递归) mirror -R /local/dir /remote/dir 本地 → 远程
    下载目录(递归) mirror /remote/dir /local/dir 远程 → 本地
    上传目录并断点续传 mirror -R --continue /local/dir /remote/dir 支持断点续传
    上传目录并多线程 mirror -R --parallel=5 /local/dir /remote/dir 并行上传5个文件
  5. 安全与证书设置,如果提示类似 Certificate verification: Not trusted 的错误,是lftp检测到服务器证书不被信任(自签名或 CA 不被本机信任),所以阻止操作。在内网环境 时,可以考虑临时忽略证书验证并在交互模式里执行对应指令。

    功能 命令示例 说明
    忽略证书验证(自签名/内网可用) set ssl:verify-certificate no 防止 FTPS/SFTP 报"不被信任证书"
    被动模式(FTP,推荐) set ftp:passive-mode on 避免 NAT/防火墙问题
    主动模式(FTP) set ftp:passive-mode off 有特殊需求时使用
  6. lftp工具同样提供了全局重试和超时设置,可以通过set命令在交互模式中配置。

    bash 复制代码
    # 设置连接超时(秒)
    set net:timeout 20
    
    # 设置重试次数
    set net:max-retries 3
    
    # 设置重试间隔(秒)
    set net:reconnect-interval-base 5
  7. 如果需要操作本地内容而不是远程,则需要在指令前加 ! 前缀。

    功能 命令示例 说明
    清屏 !clear 清空终端屏幕
    查看本地目录 !ls 显示本地文件
    查看本地路径 !pwd 显示本地路径
    执行任意本地命令 !<command> !echo hello

    记住:! → 宿主机操作,不加 → 远程操作

三、自动化登录和文件传输

  1. 如果不想每次登录都输入用户名和密码,那么可以在home目录创建文件~/.netrc并添加如下内容,其中,多台机器可以通过空行分隔 ,但是 不支持任何形式的注释。任何不被识别的字符序列,包括以 # 开头的行,都会被解析器(如 lftp、curl 或 ftp 客户端)视为无效的标记或数据,这可能导致解析错误。

    bash 复制代码
    machine <远程主机名或IP>
    login <用户名>
    password <密码>
    
    machine <远程主机名或IP>
    login <用户名>
    password <密码>
  2. 由于.netrc文件包含明文密码,系统对其安全性要求极高。如果权限设置不正确,lftp会出于安全考虑直接忽略该文件。一般将权限设置为 600(仅允许所有者读写)。

    bash 复制代码
    chmod 600 ~/.netrc
  3. 连接时lftp会自动读取.netrc文件中的用户名和密码,例如:

    bash 复制代码
    lftp 192.168.1.100
  4. 自动化上传/下载,可以使用多行输入重定向语法,将两个 EOF 之间的多行文本,作为标准输入传递给前面的命令。其实等价于登录之后,手动执行每条指令。这部分内容也可以放在脚本中执行。

    bash 复制代码
    lftp 192.168.1.100 <<EOF
    set ssl:verify-certificate no
    mirror -R --continue /local/dir /remote/dir
    bye
    EOF

小结

上述内容均来自个人实践,仅供参考,如有其他问题欢迎在评论区讨论,谢谢!!

相关推荐
天赐细莲4 小时前
(Linux) WSL 通过 VSCode 连接不执行 profile 问题(登录Shell问题)
linux·运维·vscode
咬_咬4 小时前
Linux时间轮定时器
linux·运维·网络·定时器·timerfd
北京耐用通信5 小时前
打破协议壁垒:耐达讯自动化Modbus转Profinet网关实现光伏逆变器全数据采集
运维·人工智能·物联网·网络安全·自动化·信息与通信
不惑_5 小时前
如何在 CentOS、Ubuntu 和 Debian 云服务器上安装 Python 3
ubuntu·centos·debian
dalianwawatou5 小时前
U盘配置ubuntu服务器-安装docker-镜像安装gitlab并且能够使用
运维·服务器·ubuntu
MC皮蛋侠客5 小时前
Ubuntu禁用系统手势,阻止应用程序异常最小化
linux·运维·qt·ubuntu
颇有几分姿色5 小时前
Ubuntu 系统安装教程(二):系统安装
linux·运维·ubuntu
m0_579146656 小时前
docker desktop创建ollama容器端口绑定失败
运维·docker·容器
愚昧之山绝望之谷开悟之坡6 小时前
docker和docker compose离线安装-2-报错
运维·docker·容器