Saltar a contenido

Snippets — SSH

ssh2 — SSH con tunnel y contraseña automática

Creado por Luis. Simplifica conectarse a servidores que usan autenticación por contraseña rotativa leyendo la última del log, y levanta un tunnel local al puerto que necesitás.

Instalación: copiar a /usr/local/bin/ssh2 y darle permisos de ejecución.

chmod +x /usr/local/bin/ssh2

Uso: ssh2 <servidor> <puerto-local>

ssh2 rosgan-api-nginx 80
#!/bin/bash
SERVER=$1
OUTPORT=${2:-"80"}
RESULT=`ssh 200 tail -n1 /var/log/newpass.log | grep -oE '[^ ]+$'`
PORT=`shuf -i 8085-8299 -n 1`
echo "puerto $PORT"
echo "puerto $OUTPORT"
echo "pass: $RESULT"
browse "http://localhost:$PORT?user=histrix&password=$RESULT" && ssh $SERVER -L$PORT:localhost:$OUTPORT

Warpgate — Generar config SSH automáticamente

Script que consulta la API de nuestro Bastion (Warpgate) y genera automáticamente el archivo de configuración SSH con todos los servidores disponibles para tu usuario. Útil cuando se agregan o quitan servidores del bastion — en vez de editar el config a mano, corrés el script y listo.

Requisitos

  • curl
  • jq — instalar con sudo apt install jq si no está

Instalación

Guardar como warpgate-config.sh en /usr/local/bin y darle permisos:

chmod +x /usr/local/bin/warpgate-config.sh

Uso

# Genera el config en ~/.ssh/config_warpgate (por defecto)
warpgate-config.sh

# O con ruta personalizada
warpgate-config.sh /ruta/personalizada/config

Luego agregar el include en ~/.ssh/config (una sola vez):

echo "Include ~/.ssh/config_warpgate" >> ~/.ssh/config

A partir de ahí cada vez que corras el script se actualiza el archivo y los cambios quedan disponibles automáticamente.

Token

El script tiene el TOKEN vacío. Cada uno tiene que poner el suyo en la variable TOKEN del script. El token se obtiene desde el panel de Warpgate en https://watcher.histrix.com.ar.

Script

#!/bin/bash
# Configuración
API_URL="https://watcher.histrix.com.ar/@warpgate/api/targets"
TOKEN=""           # <- Poner tu token acá
USERNAME="pablo.bagliere"  # <- Cambiar por tu usuario
OUTPUT_FILE="${1:-$HOME/.ssh/config_warpgate}"

# Colores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo -e "${YELLOW}Obteniendo targets desde Warpgate...${NC}" >&2

response=$(curl --silent --fail --request GET \
  --url "$API_URL" \
  --header 'Accept: application/json; charset=utf-8' \
  --header "X-Warpgate-Token: $TOKEN" 2>/dev/null)

if [ -z "$response" ] || [ "$response" = "null" ]; then
    echo -e "${RED}Error: No se pudo obtener respuesta de la API${NC}" >&2
    echo "Verifica:" >&2
    echo "  - El token es válido" >&2
    echo "  - La URL es accesible: $API_URL" >&2
    exit 1
fi

if ! echo "$response" | jq empty 2>/dev/null; then
    echo -e "${RED}Error: Respuesta no es JSON válido${NC}" >&2
    exit 1
fi

ssh_hosts=$(echo "$response" | jq -r '.[] | select(.kind == "Ssh") | .name' | sort -f)

if [ -z "$ssh_hosts" ]; then
    echo -e "${RED}Error: No se encontraron targets SSH${NC}" >&2
    exit 1
fi

host_count=$(echo "$ssh_hosts" | wc -l)

{
    echo "# =============================================="
    echo "# SSH Config generado automáticamente desde Warpgate"
    echo "# Fecha: $(date '+%Y-%m-%d %H:%M:%S')"
    echo "# Total hosts: $host_count"
    echo "# =============================================="
    echo ""

    while IFS= read -r host; do
        host_lower=$(echo "$host" | tr '[:upper:]' '[:lower:]')
        echo "Host $host_lower"
        echo "    User ${USERNAME}:${host_lower}"
        echo ""
    done <<< "$ssh_hosts"

    host_list=$(echo "$ssh_hosts" | tr '[:upper:]' '[:lower:]' | tr '\n' ' ' | sed 's/ $//')

    echo "# =============================================="
    echo "# Configuración común para todos los hosts"
    echo "# =============================================="
    echo "Host $host_list"
    echo "    HostName watcher.histrix.com.ar"
    echo "    Port 2222"
} > "$OUTPUT_FILE"

echo -e "${GREEN}✓ Config SSH generada en: $OUTPUT_FILE${NC}" >&2
echo -e "${GREEN}✓ Total de hosts SSH encontrados: $host_count${NC}" >&2
echo "" >&2
echo -e "${YELLOW}Para usar, agrega esto a tu ~/.ssh/config:${NC}" >&2
echo -e "  Include $OUTPUT_FILE" >&2