v2.3: 自定义恢复支持输入任意服务器
This commit is contained in:
@@ -439,31 +439,42 @@ restore_from_remote() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
restore_custom() {
|
restore_custom() {
|
||||||
load_config || return 1
|
echo -e "\n${CYAN}=== 自定义远程恢复 ===${NC}"
|
||||||
|
echo "从任意服务器拉取快照恢复"
|
||||||
read -p "输入远程快照完整路径: " remote_file
|
echo ""
|
||||||
|
|
||||||
|
read -p "远程服务器 IP: " custom_ip
|
||||||
|
[ -z "$custom_ip" ] && { error "IP 不能为空"; return 1; }
|
||||||
|
|
||||||
|
read -p "SSH 端口 [22]: " custom_port
|
||||||
|
custom_port=${custom_port:-22}
|
||||||
|
|
||||||
|
read -p "SSH 用户名 [root]: " custom_user
|
||||||
|
custom_user=${custom_user:-root}
|
||||||
|
|
||||||
|
read -s -p "SSH 密码: " custom_pass
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -p "快照完整路径 (如 /backup/vps/xxx.tar.gz): " remote_file
|
||||||
[ -z "$remote_file" ] && { error "路径不能为空"; return 1; }
|
[ -z "$remote_file" ] && { error "路径不能为空"; return 1; }
|
||||||
|
|
||||||
local local_file="$LOCAL_DIR/$(basename $remote_file)"
|
local local_file="/tmp/$(basename $remote_file)"
|
||||||
mkdir -p "$LOCAL_DIR"
|
|
||||||
|
|
||||||
log "下载: $remote_file"
|
log "从 ${custom_user}@${custom_ip} 下载: $remote_file"
|
||||||
if [ "$AUTH_METHOD" = "key" ]; then
|
sshpass -p "$custom_pass" rsync -avz --progress \
|
||||||
rsync -avz -e "ssh -i $SSH_KEY_PATH -p $REMOTE_PORT" \
|
-e "ssh -o StrictHostKeyChecking=no -p $custom_port" \
|
||||||
"${REMOTE_USER}@${REMOTE_IP}:${remote_file}" "$local_file"
|
"${custom_user}@${custom_ip}:${remote_file}" "$local_file"
|
||||||
else
|
|
||||||
sshpass -p "$REMOTE_PASS" rsync -avz \
|
[ ! -f "$local_file" ] && { error "下载失败"; return 1; }
|
||||||
-e "ssh -p $REMOTE_PORT" \
|
|
||||||
"${REMOTE_USER}@${REMOTE_IP}:${remote_file}" "$local_file"
|
|
||||||
fi
|
|
||||||
|
|
||||||
local mode=$(select_restore_mode)
|
local mode=$(select_restore_mode)
|
||||||
|
|
||||||
echo -e "\n${RED}警告: 即将恢复!${NC}"
|
echo -e "\n${RED}警告: 即将恢复!${NC}"
|
||||||
read -p "确认? [y/N]: " confirm
|
read -p "确认? [y/N]: " confirm
|
||||||
[[ ! "$confirm" =~ ^[Yy]$ ]] && return
|
[[ ! "$confirm" =~ ^[Yy]$ ]] && { rm -f "$local_file"; return; }
|
||||||
|
|
||||||
do_restore "$local_file" "$mode"
|
do_restore "$local_file" "$mode"
|
||||||
|
rm -f "$local_file"
|
||||||
}
|
}
|
||||||
|
|
||||||
#===============================================================================
|
#===============================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user