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:default
para dois domínios abc
e 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-config
que 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-config
para 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 push
e pull
os comandos seriam lidos diretamente dos controles remotos configurados.
Eu teria que configurar controles remotos de trabalho/casa também, ao que parece :(