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.
Uso: ssh2 <servidor> <puerto-local>
#!/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
curljq— instalar consudo apt install jqsi no está
Instalación
Guardar como warpgate-config.sh en /usr/local/bin y darle permisos:
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):
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