#\!/data/data/com.termux/files/usr/bin/bash # ssh-mdns-proxy: Resolve .local via mDNS with fallbacks, then connect HOST="$1" PORT="${2:-22}" CACHE="$HOME/.ssh/mdns-cache" QUERY="${HOST%.local}" # Alias mapping (short name → mDNS hostname) declare -A ALIASES=( [dell]="dell-latitude3400" [lenovo]="lenovo-ideapad" ) [[ -n "${ALIASES[$QUERY]}" ]] && QUERY="${ALIASES[$QUERY]}" # 1. mDNS resolution IP=$("$HOME/.local/bin/mdns-resolve" "${QUERY}.local" 2 2>/dev/null) # 2. Fallback: Tailscale DNS if [[ -z "$IP" ]]; then IP=$(getent hosts "${QUERY}.tailb0bb74.ts.net" 2>/dev/null | awk "{print \$1}") fi # 3. Fallback: cached IP 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 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"