带密码加密机制的自动 FTP 拉取脚本

✅ 最终版:加密密钥 + 加密密码 + 自动取数脚本

🔹目录结构建议

复制代码
/opt/zydata/
├── key.txt             # 存放加密密钥(第一步生成)
├── password.enc        # 存放加密后的FTP密码
├── ftp_download.sh     # 主脚本(第四步)

第一步: 服务器上输入加密后的密钥:并将这个作为ftp密码加密时的文件密钥

复制代码
echo "QWWEsdf@#20250529@hadoop" | openssl enc -aes-256-cbc -a -salt -pbkdf2 -iter 10000 -pass pass:QWWEsdf@#20250529@hadoop

执行完后 /opt/zydata/key.txt 文件内容会类似:

复制代码
U2FssbdaDSJAX18EzuXGv1LAlhYgkx9b9xOsw72lHascsBasHcbyudfurRJCtlBep+SaYgC8vEwMlr

🔸第 2 步:用上面密钥加密 FTP 登录密码

假设明文密码是 nps2eNJ*Wm5H:

复制代码
echo -n 'nps2eNJ*Wm5H' | \
openssl enc -aes-256-cbc -e -base64 \
-pass pass:U2FssbdaDSJAX18EzuXGv1LAlhYgkx9b9xOsw72lHascsBasHcbyudfurRJCtlBep+SaYgC8vEwMlr
 \
> /opt/zydata/password.enc

✅ 注意:

  • /opt/zydata/key.txt 里保存的是"密钥"

  • /opt/zydata/password.enc 是"加密后的FTP密码文件"

  • 两者分离存放,避免泄露明文密码

🔸第 3 步:自动取数脚本 ftp_download.sh

bash 复制代码
#!/bin/bash
# ==========================================
# FTP 自动取数脚本(支持密码加密)
# ==========================================

# === 1. 获取日期参数 ===
if [ -n "$1" ]; then
  day_id="$1"
else
  day_id=$(date +"%Y%m%d")
fi

# === 2. 固定密钥文件路径 ===
KEY_FILE="/opt/zydata/key.txt"
PASS_FILE="/opt/zydata/password.enc"

# === 3. 检查文件是否存在 ===
if [ ! -f "$KEY_FILE" ]; then
  echo "❌ Error: Key file '$KEY_FILE' not found."
  exit 1
fi

if [ ! -f "$PASS_FILE" ]; then
  echo "❌ Error: Password file '$PASS_FILE' not found."
  exit 1
fi

# === 4. 读取密钥(去除换行符) ===
DECRYPT_KEY=$(tr -d '\r\n' < "$KEY_FILE")

# === 5. FTP 配置 ===
FTP_HOST="FTPip"
FTP_USER="yonghu"
PORT="duankou"

# === 6. 解密密码 ===
FTP_PASSWORD=$(openssl enc -aes-256-cbc -d -base64 -in "$PASS_FILE" -pass pass:$DECRYPT_KEY)
if [ -z "$FTP_PASSWORD" ]; then
  echo "❌ Error: Failed to decrypt FTP password."
  exit 1
fi

# === 7. 文件路径配置 ===
REMOTE_DIR="home/zydata"
SYS_FILE="mid_pwr_sys_${day_id}.txt"
LOCAL_DIR="/opt/zydata"

# === 8. 执行 FTP 下载 ===
ftp -inv $FTP_HOST $PORT <<END_SCRIPT
user $FTP_USER $FTP_PASSWORD
binary
lcd $LOCAL_DIR
cd $REMOTE_DIR
get $SYS_FILE
bye
END_SCRIPT

# === 9. 检查下载结果 ===
if [ -f "$LOCAL_DIR/$SYS_FILE" ]; then
  echo "✅ 下载成功: $LOCAL_DIR/$SYS_FILE"
else
  echo "⚠️ 下载失败: 文件不存在或传输中断。"
  exit 1
fi

🔸第 4 步:赋予执行权限

bash 复制代码
chmod +x /opt/zydata/ftp_download.sh

🔸第 5 步:设置自动定时任务(每天凌晨 1 点取数) ;设置你需要的时间段

bash 复制代码
crontab -e

添加:

bash 复制代码
0 1 * * * /opt/zydata/ftp_download.sh >> /opt/zydata/ftp_download.log 2>&1

🧩 安全建议

  1. key.txt 和 password.enc 权限要严格:
bash 复制代码
chmod 600 /opt/zydata/key.txt /opt/zydata/password.enc
  • 不要把 key.txt 提交到 Git 或共享盘。

  • 如需更换 FTP 密码,只要:

    • 用旧 key 重新加密新密码 → 覆盖 password.enc

    • 不用改脚本。

相关推荐
FPGA信号处理1 小时前
【人工神经网络】第一讲:竞争网络与自组织特征映射:从胜者为王到保序映射
网络
吴声子夜歌2 小时前
Kubernetes权威指南——Kubernetes安装配置指南(网络配置)
网络·容器·kubernetes
考拉讲支付2 小时前
延迟分账 / 核销分账的技术实现方案:服务完成后再分钱,到底怎么设计?
大数据·运维·人工智能·微信小程序·小程序·系统架构
硅基造物主2 小时前
STM32 从 0 到 1 做智能家居(十二):USART2 分时复用 —— ESP-12F + MQTT
网络·stm32·mqtt·智能家居·esp-12f
我不会起名字3222 小时前
TCP 三次握手为什么是三次:丢包、重传与初始序列号
网络·tcp·原理·握手
ADAI_Bowen2 小时前
写文章 - 知乎
大数据·运维·人工智能
Yang96112 小时前
鼎讯信通DXA-3S光纤熔接机:光缆教学中的技术精粹解析
网络
GeW2 小时前
新质生产力路线图解读:数据库性能优化与Linux调优专场
linux
云宏信息3 小时前
超融合和存算分离怎么选?从性能、可靠性、扩展、成本四个维度讲述如何精准匹配架构选型 | 附企业降本轻量云方案
运维·服务器·架构·云计算
xbzb3 小时前
IP、掩码、网关、DNS 到底谁管什么?网络基础与七种设备一次讲清
网络·网关·mac·ip·dns·掩码