fix: _ssh_wrap统一管理SSH参数,修复rsync双-e导致key认证失败
This commit is contained in:
@@ -631,8 +631,7 @@ cleanup_remote() {
|
|||||||
local remote_path="${REMOTE_DIR:-/backup}/${VPS_NAME:-$(hostname)}"
|
local remote_path="${REMOTE_DIR:-/backup}/${VPS_NAME:-$(hostname)}"
|
||||||
|
|
||||||
log "🧹 清理远程旧快照 (保留${days}天)..."
|
log "🧹 清理远程旧快照 (保留${days}天)..."
|
||||||
_ssh_wrap ssh -o StrictHostKeyChecking=no \
|
_ssh_wrap ssh "${REMOTE_USER:-root}@$REMOTE_IP" \
|
||||||
-p "${REMOTE_PORT:-22}" "${REMOTE_USER:-root}@$REMOTE_IP" \
|
|
||||||
"find $remote_path -name '*.tar.gz' -mtime +$days -delete 2>/dev/null" || true
|
"find $remote_path -name '*.tar.gz' -mtime +$days -delete 2>/dev/null" || true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -883,8 +882,7 @@ do_restore_config_remote() {
|
|||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 获取远程快照列表
|
# 获取远程快照列表
|
||||||
local snap_list=$(_ssh_wrap ssh -o StrictHostKeyChecking=no \
|
local snap_list=$(_ssh_wrap ssh "${REMOTE_USER:-root}@$REMOTE_IP" \
|
||||||
-p "${REMOTE_PORT:-22}" "${REMOTE_USER:-root}@$REMOTE_IP" \
|
|
||||||
"ls -t $remote_path/*.tar.gz 2>/dev/null")
|
"ls -t $remote_path/*.tar.gz 2>/dev/null")
|
||||||
|
|
||||||
[ -z "$snap_list" ] && { error "无远程快照"; return 1; }
|
[ -z "$snap_list" ] && { error "无远程快照"; return 1; }
|
||||||
@@ -895,8 +893,7 @@ do_restore_config_remote() {
|
|||||||
local snaps=()
|
local snaps=()
|
||||||
while read -r snap; do
|
while read -r snap; do
|
||||||
local name=$(basename "$snap")
|
local name=$(basename "$snap")
|
||||||
local size=$(_ssh_wrap ssh -o StrictHostKeyChecking=no \
|
local size=$(_ssh_wrap ssh "${REMOTE_USER:-root}@$REMOTE_IP" \
|
||||||
-p "${REMOTE_PORT:-22}" "${REMOTE_USER:-root}@$REMOTE_IP" \
|
|
||||||
"ls -lh '$snap' 2>/dev/null | awk '{print \$5}'" 2>/dev/null)
|
"ls -lh '$snap' 2>/dev/null | awk '{print \$5}'" 2>/dev/null)
|
||||||
echo " $i) $name ($size)"
|
echo " $i) $name ($size)"
|
||||||
snaps+=("$snap")
|
snaps+=("$snap")
|
||||||
@@ -916,8 +913,7 @@ do_restore_config_remote() {
|
|||||||
|
|
||||||
log "下载快照: $(basename "$selected")"
|
log "下载快照: $(basename "$selected")"
|
||||||
local local_file="/tmp/remote_snapshot_$$.tar.gz"
|
local local_file="/tmp/remote_snapshot_$$.tar.gz"
|
||||||
_ssh_wrap scp -o StrictHostKeyChecking=no \
|
_ssh_wrap scp "${REMOTE_USER:-root}@$REMOTE_IP:$selected" "$local_file"
|
||||||
-P "${REMOTE_PORT:-22}" "${REMOTE_USER:-root}@$REMOTE_IP:$selected" "$local_file"
|
|
||||||
|
|
||||||
[ ! -f "$local_file" ] && { error "下载失败"; return 1; }
|
[ ! -f "$local_file" ] && { error "下载失败"; return 1; }
|
||||||
|
|
||||||
@@ -1012,13 +1008,11 @@ do_sync_remote() {
|
|||||||
log "📤 同步到远程: $REMOTE_IP:$remote_path"
|
log "📤 同步到远程: $REMOTE_IP:$remote_path"
|
||||||
|
|
||||||
# 创建远程目录(以VPS名称命名)
|
# 创建远程目录(以VPS名称命名)
|
||||||
_ssh_wrap ssh -o StrictHostKeyChecking=no \
|
_ssh_wrap ssh "${REMOTE_USER:-root}@$REMOTE_IP" \
|
||||||
-p "${REMOTE_PORT:-22}" "${REMOTE_USER:-root}@$REMOTE_IP" \
|
|
||||||
"mkdir -p $remote_path"
|
"mkdir -p $remote_path"
|
||||||
|
|
||||||
# 同步到VPS专属目录
|
# 同步到VPS专属目录
|
||||||
_ssh_wrap rsync -avz --progress \
|
_ssh_wrap rsync -avz --progress \
|
||||||
-e "ssh -o StrictHostKeyChecking=no -p ${REMOTE_PORT:-22}" \
|
|
||||||
"$latest" "${REMOTE_USER:-root}@$REMOTE_IP:$remote_path/"
|
"$latest" "${REMOTE_USER:-root}@$REMOTE_IP:$remote_path/"
|
||||||
|
|
||||||
# 清理远程旧快照
|
# 清理远程旧快照
|
||||||
@@ -1144,25 +1138,16 @@ load_config() {
|
|||||||
_ssh_wrap() {
|
_ssh_wrap() {
|
||||||
local mode="$1"; shift
|
local mode="$1"; shift
|
||||||
local key="${REMOTE_KEY:-}" pass="${REMOTE_PASS:-}"
|
local key="${REMOTE_KEY:-}" pass="${REMOTE_PASS:-}"
|
||||||
if [ -n "$key" ] && [ -f "$key" ]; then
|
local ssh_opts="-o StrictHostKeyChecking=no -p ${REMOTE_PORT:-22}"
|
||||||
case "$mode" in
|
[ -n "$key" ] && [ -f "$key" ] && ssh_opts="$ssh_opts -i $key"
|
||||||
ssh) ssh -i "$key" "$@" ;;
|
local ssh_cmd="ssh $ssh_opts"
|
||||||
scp) scp -i "$key" "$@" ;;
|
local prefix=""
|
||||||
rsync) rsync -e "ssh -i $key" "$@" ;;
|
[ -z "$key" ] || [ ! -f "$key" ] && [ -n "$pass" ] && prefix="sshpass -p $pass"
|
||||||
esac
|
case "$mode" in
|
||||||
elif [ -n "$pass" ]; then
|
ssh) $prefix $ssh_cmd "$@" ;;
|
||||||
case "$mode" in
|
scp) $prefix scp -o StrictHostKeyChecking=no ${key:+-i "$key"} -P "${REMOTE_PORT:-22}" "$@" ;;
|
||||||
ssh) sshpass -p "$pass" ssh "$@" ;;
|
rsync) $prefix rsync -e "$ssh_cmd" "$@" ;;
|
||||||
scp) sshpass -p "$pass" scp "$@" ;;
|
esac
|
||||||
rsync) sshpass -p "$pass" rsync "$@" ;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
case "$mode" in
|
|
||||||
ssh) ssh "$@" ;;
|
|
||||||
scp) scp "$@" ;;
|
|
||||||
rsync) rsync "$@" ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
save_config() {
|
save_config() {
|
||||||
|
|||||||
Reference in New Issue
Block a user