rsync带账号密码
#!/bin/bash# 带自动密码输入的rsync同步脚本
# 注意:此脚本需要安装sshpass工具# 配置部分
SOURCE="/path/to/source" # 源路径
REMOTE_USER="your_username" # 远程服务器用户名
REMOTE_HOST="remote_host_or_ip" # 远程服务器地址或IP
REMOTE_PATH="/path/to/destination" # 远程目标路径
PASSWORD="your_password" # 远程服务器密码
LOG_FILE="/var/log/rsync_sync.log" # 日志文件路径
DRY_RUN=false # 测试模式# 检查必要工具是否安装
check_dependency() {if ! command -v "$1" &> /dev/null; thenecho "错误:$1 未安装,请先安装 $1 再运行脚本"exit 1fi
}# 检查依赖
check_dependency "rsync"
check_dependency "sshpass"# 检查源路径是否存在
if [ ! -e "$SOURCE" ]; thenecho "错误:源路径 $SOURCE 不存在!"exit 1
fi# 构建远程目标路径
DESTINATION="${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}"# rsync 选项
RSYNC_OPTIONS="-avhz --progress --delete"# 构建命令
COMMAND="sshpass -p \"${PASSWORD}\" rsync ${RSYNC_OPTIONS} \"${SOURCE}\" \"${DESTINATION}\""# 如果是测试模式,添加--dry-run选项
if [ "$DRY_RUN" = true ]; thenCOMMAND="$COMMAND --dry-run"echo "===== 测试模式 - 不会执行实际操作 =====" >> "$LOG_FILE"
fi# 记录日志
echo "===== 开始同步: $(date '+%Y-%m-%d %H:%M:%S') =====" >> "$LOG_FILE"
echo "源路径: $SOURCE" >> "$LOG_FILE"
echo "目标路径: $DESTINATION" >> "$LOG_FILE"
echo "执行命令: $COMMAND" >> "$LOG_FILE"# 执行同步命令
echo "开始同步文件到 $REMOTE_HOST ..."
eval $COMMAND# 检查执行结果
if [ $? -eq 0 ]; thenecho "同步成功完成!"echo "同步成功: $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG_FILE"
elseecho "同步失败!详情请查看日志文件: $LOG_FILE"echo "同步失败: $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG_FILE"exit 1
fiecho "===== 同步结束: $(date '+%Y-%m-%d %H:%M:%S') =====" >> "$LOG_FILE"
echo "" >> "$LOG_FILE"exit 0
1.首先安装必要的工具:
bash
# Debian/Ubuntu 系统
sudo apt-get install sshpass rsync# CentOS/RHEL 系统
sudo yum install sshpass rsync
配置脚本中的参数:
- SOURCE:本地源文件 / 目录路径
- REMOTE_USER:远程服务器用户名
- REMOTE_HOST:远程服务器地址或 IP
- REMOTE_PATH:远程服务器上的目标路径
- PASSWORD:远程服务器的密码