Você pode definir configurações SSH por rede?

Você pode definir configurações SSH por rede?

estou falando sobressh_config(5). Gostaria de saber se você pode definir uma seção ou arquivo de configuração com base na rede atualmente conectada.

Estou pensando naquele cenário em que o firewall corporativo bloqueia a porta 22, mas a sua rede doméstica não. Então você tem essa configuração, mas é tecnicamente desnecessária em casa.

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

Tenho certeza de que este não é o cenário mais interessante, mas espero que você possa entender onde estou chegando.

Responder1

Eu resolvi isso tendo várias configurações nomeadas pelo domínio fornecido pelo DHCP mais um padrão como substituto, por exemplo ~/.ssh/config.abc, ~/.ssh/config.xyz, ~/.ssh/config:defaultpara dois domínios abce xyz, mais o padrão. Se você está se perguntando por que dois pontos estão no padrão - isso permite um domínio chamado default.

Depois há um pequeno script ~/.ssh/update-configque vincula um dos arquivos com base no domínio passado na linha 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

Você pode então chamar esse script manualmente com o domínio apropriado como primeiro parâmetro.

Para automatizar isso, também adicionei um 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

Agora, sempre que uma interface aparece ou sua configuração DHCP é alterada, esse script é executado update-configpara cada usuário.

Não é o ideal (e se a rede com fio tiver um domínio diferente da rede sem fio, nenhum domínio na configuração DHCP, etc.), mas tem funcionado tão bem para mim há anos que esqueci que a tinha configurada e tive que vasculhar meu antigo laptop para transplante-o para um novo.

Se não houver nenhum domínio fornecido pela configuração do DHCP, você pode tentar basear a seleção de configuração em outra coisa, como o IP atribuído.

É claro que existem algumas duplicatas nas configurações, então talvez uma configuração de origem com tags especiais (domínio DHCP, endereço/intervalo IP) e um script que filtre apenas hosts marcados para a configuração real possa ser melhor. Talvez alguém possa se inspirar aqui.

Responder2

Uma resposta, sugerida em um comentário, sugeria simplesmente manter regras por rede no arquivo de configuração SSH do usuário. Por exemplo...

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

Isso provavelmente funcionaria onde eu tivesse mais controle sobre os comandos e inserindo o nome do host, mas os gits pushe pullos comandos seriam lidos diretamente dos controles remotos configurados.

Eu teria que configurar controles remotos de trabalho/casa também, ao que parece :(

informação relacionada