¿Puedes configurar ajustes SSH por red?

¿Puedes configurar ajustes SSH por red?

estoy hablando dessh_config(5). Me pregunto si puede definir una sección o archivo de configuración según la red actualmente conectada.

Estoy pensando en ese escenario en el que el firewall corporativo bloquea el puerto 22, pero su red doméstica no. Entonces tienes esta configuración, pero técnicamente es innecesaria en casa.

Host github.com
  Hostname ssh.github.com
  Port 443

Estoy seguro de que este no es el escenario más interesante, pero espero que puedas ver a qué me refiero.

Respuesta1

Resolví esto al tener varias configuraciones nombradas por dominio proporcionado por DHCP más una predeterminada como alternativa, por ejemplo , ~/.ssh/config.abcpara dos dominios y , más la predeterminada. Si se pregunta por qué los dos puntos están por defecto, esto permite un dominio llamado .~/.ssh/config.xyz~/.ssh/config:defaultabcxyzdefault

Luego hay un pequeño script ~/.ssh/update-configque vincula uno de los archivos según el dominio pasado en la línea de comando:

#!/bin/bash`

config=~/.ssh/config
default_config=${config}:default

domain="$1"
domain_config=${config}.${domain}

if test -f ${domain_config}; then
    echo "Using config ${domain_config}"
    ln -sf ${domain_config} ${config}
else
    echo "Using default config ${default_config}"
    ln -sf ${default_config} ${config}
fi

Luego puede llamar a este script manualmente con el dominio apropiado como primer parámetro.

Para automatizar esto, también agregué un gancho NetworkManager ( /etc/NetworkManager/dispatcher.d/02-sshconfig):

#!/bin/bash

case "$2" in
    up|dhcp4-change)
        break
        ;;
    *)
        exit 0
        ;;
esac

# some iface went up

for home in /home/*; do
        user=$(basename ${home})
        script="${home}/.ssh/update-config"
        test -x ${script} && su -l ${user} ${script} ${IP4_DOMAINS}
done

exit 0

Ahora, cada vez que aparece una interfaz o se cambia su configuración DHCP, este script se ejecuta update-configpara cada usuario.

No es ideal (¿qué pasa si la red cableada tiene un dominio diferente al inalámbrico, no tiene dominio en la configuración DHCP, etc.), pero funcionó tan bien para mí durante años que olvidé que la tenía configurada y tuve que buscar en mi vieja computadora portátil para trasplantarlo a uno nuevo.

Si no hay ningún dominio proporcionado por la configuración de DHCP, puede intentar basar la selección de configuración en otra cosa, como su IP asignada.

Por supuesto, hay algunos duplicados en las configuraciones, por lo que tal vez podría ser mejor una configuración de una sola fuente con etiquetas especiales (dominio DHCP, dirección/rango IP) y un script que filtre solo los hosts etiquetados para la configuración real. Quizás alguien pueda inspirarse aquí.

Respuesta2

Una respuesta, insinuada en un comentario, sugirió simplemente mantener reglas por red en el archivo de configuración SSH del usuario. Por ejemplo...

Host foo@work
  Hostname ssh.foo.com
  Port 443

Eso probablemente funcionaría donde tengo más control sobre los comandos y el ingreso del nombre de host, pero los comandos pushy git pullse leen directamente desde los controles remotos configurados.

Parece que también tendría que configurar los controles remotos del trabajo/casa :(

información relacionada