You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现从上传服务器随机同步文件至存储服务器?优化脚本密码限制

改进方案:支持多主机独立认证+动态服务器列表

推荐方案:SSH密钥认证(安全无密码)

这是最安全可靠的方式,完全不需要明文存储密码,同时能实现动态管理服务器列表。

步骤1:配置SSH密钥对

在上传服务器(ftp.example.com)执行以下命令生成密钥对(一路回车,不要设置密钥密码):

ssh-keygen -t ed25519

步骤2:分发公钥到存储服务器

依次将公钥复制到每台存储服务器的root用户下:

ssh-copy-id root@fs1.example.com
ssh-copy-id root@fs2.example.com
ssh-copy-id root@fs3.example.com
ssh-copy-id root@fs4.example.com

步骤3:编写改进后的脚本(支持动态服务器列表)

创建一个服务器列表文件/root/storage_hosts.txt,每行一个存储服务器的登录信息(支持注释,用#开头):

# 存储服务器列表
root@fs1.example.com
root@fs2.example.com
root@fs3.example.com
root@fs4.example.com

然后替换原脚本为以下内容(路径/root/sync_mp4.sh):

#!/bin/bash

# 从列表文件中随机选择一台可用主机(忽略注释和空行)
TARGET_HOST=$(grep -v '^#' /root/storage_hosts.txt | grep -v '^$' | shuf -n1)

# 检查是否获取到有效主机
if [ -z "$TARGET_HOST" ]; then
    echo "错误:未找到可用的存储服务器"
    exit 1
fi

# 同步符合条件的文件到随机主机,同步后删除源文件
find /root/* -mmin +1 -type f -name '*.mp4' -exec realpath {} \; -exec rsync --remove-source-files {} "${TARGET_HOST}":/ \;

给脚本添加执行权限:

chmod +x /root/sync_mp4.sh

备选方案:明文密码存储(不推荐,仅用于特殊场景)

如果因限制必须使用密码登录,可将主机和对应密码存储在文本文件中,但明文存储密码存在严重安全风险,需做好文件权限控制。

步骤1:创建带密码的服务器列表

创建/root/storage_hosts_with_pass.txt,每行格式为用户名@主机 密码(密码不能包含空格):

root@fs1.example.com your_fs1_pass
root@fs2.example.com your_fs2_pass
root@fs3.example.com your_fs3_pass
root@fs4.example.com your_fs4_pass

设置严格的文件权限,仅root可读写:

chmod 600 /root/storage_hosts_with_pass.txt

步骤2:编写对应脚本

#!/bin/bash

# 随机选择一行主机信息(忽略注释和空行)
SELECTED_LINE=$(grep -v '^#' /root/storage_hosts_with_pass.txt | grep -v '^$' | shuf -n1)

# 检查是否获取到有效信息
if [ -z "$SELECTED_LINE" ]; then
    echo "错误:未找到可用的存储服务器"
    exit 1
fi

# 拆分主机和密码
TARGET_HOST=$(echo "$SELECTED_LINE" | cut -d' ' -f1)
TARGET_PASS=$(echo "$SELECTED_LINE" | cut -d' ' -f2)

# 同步文件
find /root/* -mmin +1 -type f -name '*.mp4' -exec realpath {} \; -exec sshpass -p "$TARGET_PASS" rsync --remove-source-files {} "${TARGET_HOST}":/ \;

同样给脚本添加执行权限:

chmod +x /root/sync_mp4.sh

注意事项

  • SSH密钥方案中,若存储服务器的SSH端口不是默认22,可在storage_hosts.txt中指定端口,比如root@fs1.example.com:2222。
  • 动态更新服务器列表时,直接编辑对应列表文件即可,无需修改脚本。
  • 定期检查cron任务的执行日志,确保同步正常。

内容的提问来源于stack exchange,提问作者Paulamonopoly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:15:00