O que o @RolandW sugere está correto e funcionará se e somente se o servidor B na rede privada estiver diretamente acessível do servidor A, ou seja , se e somente o servidor B não estiver atrás de um firewall e de um roteador NAT.
Se qualquer uma dessas duas suposições for falsa, você terá que usar uma solução diferente. Nesse caso, como B não é diretamente acessível de A, você terá que estabelecer um túnel reverso de B para A e, em seguida, poderá acessar B de sua casa.
No servidor B,
Adicione esta linha para /etc/rc.local
su -c /home/your_name/bin/auto your_name
Crie um arquivo executável chamado auto in /home/your_name/bin
, chamado auto
, com este conteúdo:
#!/bin/sh
/usr/lib/autossh/autossh -M 6321 -f -p 22 -2 -N -D -R 8100:localhost:22 your_name_o_server_A@IP_address_of_server_A -i /path/to/cryptokey/of_server_A
O comando autossh é um utilitário muito conveniente que automaticamente reinicia o túnel ssh toda vez que ele desce (falta de energia, reinicializações, qualquer coisa); Para fazer isso, ele usa uma porta (no meu caso, 6321) para verificar o status da conexão. Você pode muito bem usar uma porta TCP diferente de 6321 (mas maior que 1024!), Apenas certifique-se de que ela esteja aberta no servidor A.
O comando acima assume que você ativou a autenticação por meio de chaves criptográficas, o que definitivamente deve ser feito.
No servidor A, você terá que introduzir a seguinte linha
GatewayPorts yes
no arquivo /etc/ssh/sshd_config
. Isso exige privilégios de sudo.
Por fim, você pode se conectar em casa da seguinte maneira:
ssh -YC -t -t -p 22 -i /path/to/cryptkey/of_server_A \
your_name_o_server_A@IP_address_of_server_A \
"ssh -Y your_name_on_server_B@localhost -p 8100 -i /path/to/cryptkey/of-server_B"
Claro que será conveniente estabelecer aliases para tornar a chamada acima mais rápida.