70 lines
2.1 KiB
Bash
Executable file
70 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Shared library: loads .env and exposes SSH helpers.
|
|
# Sourced by every script in this directory.
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
STACK_DIR="$(dirname "$SCRIPT_DIR")"
|
|
ENV_FILE="${STACK_DIR}/.env"
|
|
|
|
if [ ! -f "$ENV_FILE" ]; then
|
|
echo "❌ $ENV_FILE not found. Copy .env.example to .env and fill it in." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Load .env without leaking variables to the shell history
|
|
set -a
|
|
# shellcheck disable=SC1090
|
|
source "$ENV_FILE"
|
|
set +a
|
|
|
|
: "${VPS_HOST:?VPS_HOST not set in .env}"
|
|
: "${VPS_USER:?VPS_USER not set in .env}"
|
|
: "${VPS_PORT:=22}"
|
|
: "${VPS_AUTH:=password}"
|
|
|
|
# ssh wrapper — uses password (sshpass) OR key, transparently
|
|
vps_ssh() {
|
|
local cmd="${1:-}"
|
|
if [ "$VPS_AUTH" = "password" ]; then
|
|
if ! command -v sshpass >/dev/null; then
|
|
echo "❌ sshpass not installed. Install with: brew install hudochenkov/sshpass/sshpass" >&2
|
|
exit 1
|
|
fi
|
|
if [ -n "$cmd" ]; then
|
|
SSHPASS="$VPS_PASSWORD" sshpass -e \
|
|
ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10 \
|
|
-p "$VPS_PORT" "${VPS_USER}@${VPS_HOST}" "$cmd"
|
|
else
|
|
SSHPASS="$VPS_PASSWORD" sshpass -e \
|
|
ssh -o StrictHostKeyChecking=accept-new \
|
|
-p "$VPS_PORT" "${VPS_USER}@${VPS_HOST}"
|
|
fi
|
|
else
|
|
local key="${VPS_SSH_KEY/#\~/$HOME}"
|
|
if [ -n "$cmd" ]; then
|
|
ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10 \
|
|
-p "$VPS_PORT" -i "$key" "${VPS_USER}@${VPS_HOST}" "$cmd"
|
|
else
|
|
ssh -o StrictHostKeyChecking=accept-new \
|
|
-p "$VPS_PORT" -i "$key" "${VPS_USER}@${VPS_HOST}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# rsync wrapper
|
|
vps_rsync() {
|
|
local src="$1" dst="$2"
|
|
if [ "$VPS_AUTH" = "password" ]; then
|
|
SSHPASS="$VPS_PASSWORD" sshpass -e \
|
|
rsync -avz --progress \
|
|
-e "ssh -o StrictHostKeyChecking=accept-new -p $VPS_PORT" \
|
|
"$src" "${VPS_USER}@${VPS_HOST}:${dst}"
|
|
else
|
|
local key="${VPS_SSH_KEY/#\~/$HOME}"
|
|
rsync -avz --progress \
|
|
-e "ssh -o StrictHostKeyChecking=accept-new -p $VPS_PORT -i $key" \
|
|
"$src" "${VPS_USER}@${VPS_HOST}:${dst}"
|
|
fi
|
|
}
|