Conectando-se ao servidor Ubuntu via SSH externamente

25

Instalei recentemente o Ubuntu Server 12.04 (Precise Pangolin) e pretendo usá-lo principalmente como servidor de arquivos. Eu sou completamente novo no Linux, então essa é uma grande curva de aprendizado. Ontem consegui configurar o PuTTY na minha máquina Windows 7 usando um par de chaves SSH para poder administrar o Ubuntu Server na minha área de trabalho. Isso funciona bem, desde que ambas as máquinas estejam na mesma rede.

No caso do meu laptop ( MacBook Air ), ele pode nem sempre estar na mesma rede. É possível conectar ao servidor Ubuntu do meu laptop via SSH quando ele estiver em uma rede diferente?

Instalei o daemon avahi para que o nome do host do servidor seja transmitido na LAN e configurei o roteador para que ele sempre atribua o mesmo endereço IP ao servidor. Além disso, a única coisa que instalei no servidor é o OpenSSH, onde desabilitei a autenticação por senha para que você possa se conectar usando apenas um par de chaves.

Eu pensei que seria capaz de fazer algo assim no terminal do meu laptop:

ssh my.external.ip.address [email protected]

Quando tento esse comando, recebo o erro:

ssh: conecte-se ao host my.external.ip.address porta 22: a operação atingiu o tempo limite

Eu também tentei

ssh my.external.ip.address [email protected]

e recebo a mesma mensagem de erro de antes. Portanto, isso deve lhe dar uma idéia do que estou tentando fazer, mas isso é possível e, se for, como faço?

Supondo que eu possa configurar uma conexão externa via ssh no meu laptop, existe a possibilidade de que meu ISP altere meu endereço IP externo, o que interromperia a conexão externa. Eu gostaria de poder conectar-me com robustez, ou seja, se meu ISP alterar o endereço IP externo, ainda assim poderei conectar remotamente ao servidor sem precisar saber qual é o novo endereço IP externo.

Aesir
fonte

Respostas:

23

Primeiro de tudo, o comando correto é: ssh [email protected]

E o roteador deve ser configurado para encaminhar a porta SSH 22 para o endereço IP local do seu servidor.

Para mais depuração:

1) Verifique se a porta 22 (SSH) está aberta no servidor e no roteador (encaminhamento de porta).

2) Verifique se o servidor SSH está sendo executado no seu servidor

3) Use ping, ssh -venquanto estiver conectando, e procure /var/log/auth.logdepurar outros problemas de conexão.

1) No seu roteador: siga as instruções específicas do roteador

No seu servidor: sudo ufw status(a menos que você use outro utilitário de configuração de firewall) ou sudo iptables -L(método geral, mas saída complexa)

Para abrir a porta 22: sudo ufw allow 22

cf https://help.ubuntu.com/12.04/serverguide/firewall.html

2) Verifique se está instalado: dpkg -l openssh-server

Verifique se está em execução: service ssh statusoups aux | grep sshd

3) No cliente de conexão:

No servidor:

  • sudo less /var/log/auth.log

Você também pode verificar os logs do roteador, se necessário.

Aqui está um scanner de porta online: https://www.grc.com/x/ne.dll?bh0bkyd2

Eu acho que você pode usar ferramentas como o nmap ou outro também, mas ainda não estou familiarizado com elas.

Lidando com um endereço IP externo variável:

1) Obtenha uma conta dynDNS ou similar: http://dyn.com/dns/

Listas de provedores de DNS dinâmicos:

2) Outra solução é configurar um trabalho de crontab, que envia por e-mail seu endereço IP externo regularmente ou coloca em um serviço de armazenamento online como o dropbox.

Aqui está um script que um amigo meu usa:

    #!/bin/bash
    # Bash script to get the external IP address
    MYWANIP=$(curl http://mire.ipadsl.net | sed -nr -e 's|^.*<span class="ip">([0-9.]+)</span>.*$|\1| p')
    echo "My IP address is: $MYWANIP"

    IPold=$(cat /home/USER/Dropbox/test.txt)
    echo "Previous IP Address: $IPold"

    if [[ $IPold != $MYWANIP ]] ;
    then
      echo "New IP"
      rm /home/USER/Dropbox/test.txt
      echo $MYWANIP >> /home/USER/Dropbox/test.txt;
      echo $MYWANIP;
    else
      echo "Same IP";
    fi

    # example crontab entry:
    ## m h  dom mon dow   command
    ## */10 * * * * /home/USER/Dropbox/test_ip.sh

Encaminhamento de porta do roteador:

1) Primeiro, descubra o endereço IP local do seu roteador executando:

ip route | grep default

Geralmente é algo como 192.168.xx

Maneiras alternativas e outras soluções de SO:

2) Usando qualquer computador conectado localmente ao roteador, acesse o IP encontrado anteriormente, ou seja, via http://192.168.1.1, por exemplo. Isso deve abrir a interface de configuração do roteador.

3) Os próximos passos variam dependendo do seu roteador. Aqui está como isso é feito em um roteador com o OpenWRT, por exemplo:

https://newspaint.wordpress.com/2012/08/26/how-to-add-a-port-forward-using-the-web-interface-on-openwrt-10-03-1/

KIAaze
fonte
Obrigado por isso, vou percorrer as sugestões agora.
Aesir
Ok, tudo o que tive que fazer foi encaminhar a porta 22 do meu roteador para o servidor e ele funciona, muito obrigado. Existe uma maneira de resolver a segunda parte da minha pergunta sobre o fato de que meu endereço IP externo pode mudar? - Acabei de ver sua edição, vai ler agora.
Aesir
Você poderia explicar como posso encaminhar a porta 22 do meu roteador para o servidor? O que isso significa? Obrigado!
xxx222
Depende do roteador que você possui, mas geralmente deve haver uma página de encaminhamento de porta ou configurações de firewall em algum lugar. Aqui está como fazer isso em um roteador com o OpenWRT: newspaint.wordpress.com/2012/08/26/… A maioria dos roteadores pode ser configurada acessando 192.168.1.1 ou um endereço 192.168.xx semelhante no navegador, se você estiver em a mesma rede que o roteador.
KIAaze
3

Por padrão no Ubuntu (Desktop), o SSH não está instalado.

Você pode instalá-lo pelo seguinte comando no Terminal:

sudo apt-get install openssh-server

Ele deve instalar e iniciar o serviço imediatamente.

kenorb
fonte
2
+1. Isso funcionou muito bem quando eu tentei. Eu era capaz de ssh na máquina Ubuntu logo após executar esse comando (para Ubuntu 14.04 (Trusty Tahr), edição para desktop de 64 bits).
Peter Mortensen