termux-samba/scripts/ssh-mdns-proxy

51 lines
1.4 KiB
Plaintext
Raw Permalink Normal View History

#!/usr/bin/env bash
# ssh-mdns-proxy: Resolve .local via mDNS with fallbacks, then connect
# Usado como ProxyCommand en ~/.ssh/config
#
# PERSONALIZAR:
# - ALIASES: agregar tus hosts con nombres cortos
# - TS_DOMAIN: cambiar a tu dominio Tailscale (ver: tailscale status)
# - Si no usas Tailscale, el fallback simplemente se salta
HOST="$1"
PORT="${2:-22}"
CACHE="$HOME/.ssh/mdns-cache"
QUERY="${HOST%.local}"
# --- PERSONALIZAR: aliases de tus equipos ---
declare -A ALIASES=(
[dell]="dell-latitude3400"
[lenovo]="lenovo-ideapad"
)
# --- PERSONALIZAR: dominio Tailscale ---
TS_DOMAIN="tailb0bb74.ts.net"
[[ -n "${ALIASES[$QUERY]}" ]] && QUERY="${ALIASES[$QUERY]}"
# 1. mDNS resolution (red local)
IP=$("$HOME/.local/bin/mdns-resolve" "${QUERY}.local" 2 2>/dev/null)
# 2. Fallback: Tailscale DNS (fuera de LAN)
if [[ -z "$IP" ]]; then
IP=$(getent hosts "${QUERY}.${TS_DOMAIN}" 2>/dev/null | awk "{print \$1}")
fi
# 3. Fallback: cached IP (si todo falla)
if [[ -z "$IP" && -f "$CACHE" ]]; then
IP=$(grep "^${QUERY} " "$CACHE" 2>/dev/null | awk "{print \$2}")
fi
if [[ -z "$IP" ]]; then
echo "Error: cannot resolve ${HOST}" >&2
exit 1
fi
# Save to cache for next time
mkdir -p "$(dirname "$CACHE")"
grep -v "^${QUERY} " "$CACHE" > "${CACHE}.tmp" 2>/dev/null || true
echo "${QUERY} ${IP}" >> "${CACHE}.tmp"
mv "${CACHE}.tmp" "$CACHE"
exec nc "$IP" "$PORT"