Configurei o ssh e o encaminhamento de porta do roteador para que eu possa ssh em um computador na minha rede doméstica quando não estiver em casa. Atualmente, tenho duas entradas no meu .ssh/config
arquivo, uma para quando estou na minha rede doméstica e uma para quando não estou:
Host mycomputer
HostName 192.168.X.X
Host mycomputerathome
HostName my.no-ip.dynamic
Isso funciona, mas estou me perguntando se posso facilitar as coisas para mim. Eu esperava que houvesse uma maneira de listar várias entradas de HostName, de modo que, se a primeira falhar, ela retornasse à segunda:
Host mycomputer
HostName 192.168.X.X
HostName my.no-ip.dynamic
Para que ele primeiro tente se conectar a um host na minha rede local e, se isso não estiver presente, ele tentará se conectar usando meu nome de host dinâmico sem IP. Eu tentei digitar dois HostNames, mas executando ssh mycomputer
apenas blocos sem fazer nada.
Desativei a autenticação de senha em favor das chaves, para que acidentalmente me conectasse a um computador na rede local quando não estou na minha rede doméstica, não correria o risco de minha senha ir para qualquer lugar que não deveria.
É possível especificar HostNames de fallback para tentar se o primeiro não funciona?
.ssh/config
pode executar scripts para determinadas propriedades. Eu sei que você pode com ProxyCommand. Você pode fazer algo como mostrado nas perguntas e respostas em SF - serverfault.com/questions/401233/… .Respostas:
É feio, mas acho que você poderia fazê-lo usando o
exec
critério deMatch
status de saída de uma batida de porta, por exemploObserve que isso não pode realmente dizer se você está na "sua" rede doméstica - apenas que você está em um segmento de LAN privado com o mesmo intervalo de endereços que por acaso tem um serviço escutando no mesmo endereço / porta.
fonte
-w 1
ounc
parecia esperar para sempre. O que poderia ser mais simples é a segunda correspondência,Match exec "true"
porque se a primeira correspondência falhar, tente cegamente a segunda opção.Match
não tem umElse
)ssh xyz.com
o meuMatch exec "true"
pegou isso e me redirecionado para o meu servidor de casa usando o meu nome da máquina remota. Vou tentar com o seu executivo, mas acho que a mesma coisa acontecerá.Match exec... Match !exec
está causando ssh'ing para outros domínios para acionarMatch !exec
e reescrever o HostName.~/.ssh/config
isso não se importava com o recuo. Certos comandos redefinem o escopo, ou seja, cada nova linha do Host diz "linhas anteriores eram para o Host anterior, as seguintes linhas são para este novo Host". Acontece queMatch
tem o mesmo poder de "redefinição de escopo" que o Host. Para explicar isso, substituí minha linha Host porMatch Host mycomputer exec "nc -w 1 -z 192.168.X.X 22"
e defini todos os valores personalizados para minha rede local. Em seguida, adicionei uma linha correspondente, exceto!exec
os valores de quando estou fora da rede. Agora funciona bem para todos os hosts.Eu estou usando assim.
O ssh_config não tem algo como bloco de indentação. Se você deseja limitar a sentença de correspondência a um host específico, deve descrever a condição completa.
Você pode evitar muito tempo de espera
nc
, dando a opção-G 1
(timeout 1s da conexão) e pode utilizar o seguinte comportamento para evitar a chamada múltipla denc
https://www.freebsd.org/cgi/man.cgi?sshd_config(5)
fonte
Não; se você especificar vários
HostName
s para umaHost
entrada, somente a primeira será confirmada:fonte
ssh mycomputer
, deve ser bastante inequívoco a qual computador estou me conectando.