Isso é perfeitamente possível com apenas a configuração ssh, sem a necessidade de usar aliases separados para lan e wan ou criar qualquer porta extra para a frente. (Naturalmente, você precisa de alguma maneira de detectar se está dentro da sua LAN ou não)
Em ~/.ssh/config
, você deseja adicionar algo como isto:
Match host raspi exec "am_i_outside_of_my_lan"
HostName 12.345.67.89
Port 1234
No lugar de am_i_outside_of_my_lan
você deseja colocar um comando que determine se você está dentro da sua rede doméstica ou não e retorna com o código de saída 0 se você estiver fora dela, e algo mais.
A host
condição é provavelmente auto-explicativa, mas a exec
condição merece alguma explicação: Combina apenas quando o comando fornecido retorna com o código de saída 0, ou seja. sem erro.
Portanto, em outras palavras, o que isso faz é a host raspi
parte que restringe essa regra quando você tenta se conectar ao raspi do host e a exec "am_i_outside_my_lan"
restringe ainda mais, de forma que ela só se aplica quando você está se conectando de fora da sua rede doméstica. Portanto, dentro da sua rede doméstica ssh user@raspi
faz exatamente o que normalmente faria, mas fora dela a regra corresponde e, em vez disso, o equivalente a ssh -p 1234 user@12.345.67.89
.
Quanto ao que usar no lugar am_i_outside_of_my_lan
, isso depende inteiramente da sua configuração. Eu sugiro colocar os comandos em um script separado, em vez de tentar escrevê-lo em linha, porque a citação parece um pouco difícil de acertar.
Pessoalmente, usei o seguinte script Python para detectar se estou dentro da minha própria rede: (Como meu nome de domínio é resolvido para um IP local dentro da minha própria rede)
#! /usr/bin/env python
import socket, sys
sys.exit(socket.gethostbyname('mydomain.com').startswith('192.168.1.'))
Se você não tiver uma configuração semelhante, talvez precise fazer outra coisa. (Por exemplo, você pode procurar o nome da rede sem fio à qual está conectado ou até consultar algum serviço what-is-my-ip para obter o ip externo da rede à qual está conectado)