Isto é perfeitamente possível com apenas a configuração ssh, sem ter que usar aliases separados para lan e wan ou criar qualquer porta extra para frente. (Mas você naturalmente precisa de alguma maneira para detectar se você está dentro da sua lan ou não)
Em ~/.ssh/config
, você desejará adicionar algo assim:
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ê vai querer colocar um comando que determine se você está dentro da sua rede doméstica ou não, e retorna com 0 código de saída se você estiver fora dele, e outra coisa diferente.
A condição host
é provavelmente autoexplicativa, mas a condição exec
garante alguma explicação: Ela corresponde apenas quando o comando especificado retorna com o código de saída 0, ex. sem erro.
Em outras palavras, o que isso faz é a parte host raspi
restringir essa regra quando você tenta se conectar ao raspi do host, e o exec "am_i_outside_my_lan"
restringe ainda mais para que se aplique somente quando você está se conectando fora da sua rede doméstica. Portanto, dentro de sua rede doméstica, ssh user@raspi
faz exatamente o que normalmente faria, mas fora dela a regra corresponde e, em vez disso, faz o equivalente a ssh -p 1234 [email protected]
.
Quanto ao que usar no lugar de 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 ser 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 resolve para um ip local dentro de 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ê poderia ver o nome da rede sem fio à qual está conectado ou até mesmo consultar algum serviço what-is-my-ip para obter o ip externo da rede à qual está conectado)