本文目录导读:

基于 SCP 的脚本
#!/bin/bash # 远程文件拷贝脚本 - SCP版本 # 配置 REMOTE_USER="username" REMOTE_HOST="192.168.1.100" REMOTE_PATH="/home/username/data/" LOCAL_PATH="/data/backup/" # 拷贝远程文件到本地 echo "开始拷贝远程文件到本地..." scp -P 22 "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/file.txt" "$LOCAL_PATH/" # 拷贝本地文件到远程 echo "开始拷贝本地文件到远程..." scp -P 22 "$LOCAL_PATH/local_file.txt" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/" # 拷贝整个目录 echo "开始拷贝远程目录到本地..." scp -r "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH" "$LOCAL_PATH/" echo "文件拷贝完成!"
基于 RSYNC 的增量拷贝脚本
#!/bin/bash
# 增量备份脚本 - rsync版本
# 配置
REMOTE_USER="username"
REMOTE_HOST="192.168.1.100"
SOURCE_DIR="/home/username/data/"
DEST_DIR="/data/backup/"
EXCLUDE_FILE="temp/"
# 同步远程到本地
rsync -avz --progress --partial \
-e "ssh -p 22" \
--exclude="$EXCLUDE_FILE" \
"$REMOTE_USER@$REMOTE_HOST:$SOURCE_DIR" "$DEST_DIR"
# 同步本地到远程
rsync -avz --progress --partial \
-e "ssh -p 22" \
--exclude="$EXCLUDE_FILE" \
"$DEST_DIR" "$REMOTE_USER@$REMOTE_HOST:$SOURCE_DIR"
echo "同步完成!"
自动批量文件拷贝脚本
#!/bin/bash
# 批量远程文件拷贝脚本
# 服务器列表
SERVERS=(
"192.168.1.10"
"192.168.1.11"
"192.168.1.12"
)
# 配置
REMOTE_USER="admin"
REMOTE_PORT=22
LOCAL_FILE="/path/to/local/file.txt"
REMOTE_PATH="/home/admin/uploads/"
SSH_KEY="/home/user/.ssh/id_rsa"
# 批量拷贝函数
batch_copy() {
local file=$1
local dest=$2
for server in "${SERVERS[@]}"; do
echo "正在拷贝到 $server..."
scp -i "$SSH_KEY" -P "$REMOTE_PORT" \
"$file" "${REMOTE_USER}@${server}:${dest}"
if [ $? -eq 0 ]; then
echo "✓ $server 拷贝成功"
else
echo "✗ $server 拷贝失败"
fi
done
}
# 执行批量拷贝
batch_copy "$LOCAL_FILE" "$REMOTE_PATH"
带日志和错误处理的完整脚本
#!/bin/bash
# 完善的远程文件拷贝脚本
# 日志配置
LOG_FILE="/var/log/file_copy_$(date +%Y%m%d).log"
ERROR_LOG="/var/log/file_copy_error_$(date +%Y%m%d).log"
# 配置文件
CONFIG_FILE="/etc/remote_copy.conf"
# 日志函数
log_info() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [INFO] $1" | tee -a "$LOG_FILE"
}
log_error() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [ERROR] $1" | tee -a "$ERROR_LOG" >&2
}
# 加载配置
load_config() {
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
log_info "配置文件加载成功"
else
log_error "配置文件 $CONFIG_FILE 不存在"
exit 1
fi
}
# 检查依赖
check_dependencies() {
local cmds=("ssh" "scp" "rsync")
for cmd in "${cmds[@]}"; do
if ! command -v "$cmd" &> /dev/null; then
log_error "$cmd 未安装"
exit 1
fi
done
log_info "依赖检查通过"
}
# 测试SSH连接
test_ssh_connection() {
log_info "测试 SSH 连接..."
ssh -o ConnectTimeout=5 -o BatchMode=yes \
"${REMOTE_USER}@${REMOTE_HOST}" "echo '连接成功'" 2>/dev/null
if [ $? -eq 0 ]; then
log_info "SSH 连接测试成功"
return 0
else
log_error "SSH 连接测试失败"
return 1
fi
}
# 执行文件拷贝
copy_files() {
local source=$1
local destination=$2
local mode=${3:-"scp"} # 默认使用scp
case "$mode" in
"scp")
log_info "使用 SCP 拷贝..."
scp -P "$REMOTE_PORT" \
-o "StrictHostKeyChecking=no" \
-o "ServerAliveInterval=60" \
"$source" "${REMOTE_USER}@${REMOTE_HOST}:${destination}"
;;
"rsync")
log_info "使用 RSYNC 拷贝..."
rsync -avz --progress \
-e "ssh -p $REMOTE_PORT" \
"$source" "${REMOTE_USER}@${REMOTE_HOST}:${destination}"
;;
*)
log_error "不支持的拷贝模式: $mode"
return 1
;;
esac
return $?
}
# 主函数
main() {
# 检查依赖
check_dependencies
# 加载配置
load_config
# 测试连接
test_ssh_connection || exit 1
# 执行拷贝
if copy_files "$SOURCE" "$DEST" "scp"; then
log_info "文件拷贝成功"
else
log_error "文件拷贝失败"
exit 1
fi
}
# 执行主函数
main "$@"
配置文件示例 (remote_copy.conf)
# 远程服务器配置 REMOTE_USER="admin" REMOTE_HOST="192.168.1.100" REMOTE_PORT=22 # 路径配置 SOURCE="/data/source/file.txt" DEST="/data/backup/" # SSH密钥路径 SSH_KEY="/home/user/.ssh/id_rsa" # 重试次数 RETRY_COUNT=3 # 超时设置(秒) TIMEOUT=30
使用方法
# 1. 创建脚本 chmod +x remote_copy.sh # 2. 基本使用 ./remote_copy.sh # 3. 带参数使用 ./remote_copy.sh /local/file.txt user@host:/remote/path/ # 4. 添加到crontab(定时任务) crontab -e # 每天凌晨2点执行 0 2 * * * /path/to/remote_copy.sh >> /var/log/copy.log 2>&1
安全保障
#!/bin/bash
# 带安全检查的脚本
# 设置SSH密钥认证(免密码)
ssh-keygen -t rsa -b 4096
ssh-copy-id user@remote_host
# 在Linux中正确使用密码参数
# 1. 使用 sshpass (需要安装)
# apt-get install sshpass (Ubuntu)
# yum install sshpass (CentOS)
# 2. 连接到远程服务器并执行命令
sshpass -p 'your_password' ssh user@remote_host "ls -la"
# 3. 使用 sshpass 进行文件传输
sshpass -p 'your_password' scp file.txt user@remote_host:/path/
# 注意:永远不要在脚本中硬编码密码!
# 推荐使用环境变量或配置文件
PASSWORD="${COPY_PASSWORD:-$(cat /run/secrets/copy_password)}"
注意事项
-
安全考虑
- 使用SSH密钥认证,避免密码暴露
- 限制脚本执行权限 (chmod 700)
- 不要在脚本中硬编码密码
-
性能优化
- 使用rsync替代scp进行增量同步
- 对大文件使用压缩传输
- 设置合适的超时时间
-
错误处理
- 添加重试机制
- 记录详细的日志
- 发送通知(邮件、钉钉等)
需要我详细解释某个特定场景的脚本实现吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播