Łączenie z serwerem Ubuntu przez SSH zewnętrznie

25

Niedawno zainstalowałem Ubuntu Server 12.04 (Precise Pangolin) i zamierzam używać go przede wszystkim jako serwera plików. Jestem całkowicie nowy w Linuksie, więc jest to dość duża krzywa uczenia się. Wczoraj mogłem skonfigurować PuTTY na moim komputerze z systemem Windows 7 za pomocą pary kluczy SSH, aby móc administrować Ubuntu Server z mojego komputera. Działa to dobrze, pod warunkiem że oba komputery są w tej samej sieci.

W przypadku mojego laptopa ( MacBook Air ) może nie zawsze być w tej samej sieci. Czy można połączyć się z serwerem Ubuntu z mojego laptopa przez SSH, gdy jest on w innej sieci?

Zainstalowałem demona avahi, aby nazwa hosta serwera była rozgłaszana w sieci LAN i skonfigurowałem router, aby zawsze przypisywał ten sam adres IP serwerowi. Poza tym jedyną rzeczą, którą zainstalowałem na serwerze, jest OpenSSH, w którym wyłączyłem uwierzytelnianie hasłem, aby można było łączyć się tylko za pomocą pary kluczy.

Myślałem, że będę mógł zrobić coś takiego z terminala na moim laptopie:

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

Kiedy próbuję tego polecenia, pojawia się błąd:

ssh: połącz się z hostem my.external.ip.address port 22: upłynął limit czasu operacji

Próbowałem też

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

i otrzymuję taki sam komunikat o błędzie jak poprzednio. To powinno dać ci wyobrażenie o tym, co próbuję zrobić, ale czy jest to możliwe, a jeśli tak, to jak to zrobić?

Zakładając, że mogę skonfigurować połączenie zewnętrzne za pośrednictwem ssh z mojego laptopa, istnieje możliwość, że mój dostawca usług internetowych zmieni mój zewnętrzny adres IP, co przerwie połączenie zewnętrzne. Chciałbym mieć możliwość solidnego połączenia, to znaczy jeśli mój dostawca usług internetowych zmieni zewnętrzny adres IP, nadal będę mógł połączyć się zdalnie z serwerem bez konieczności dowiedzenia się, jaki jest nowy zewnętrzny adres IP.

Aesir
źródło

Odpowiedzi:

23

Przede wszystkim poprawne polecenie to: ssh [email protected]

Router powinien być skonfigurowany do przekazywania portu SSH 22 na lokalny adres IP serwera.

W celu dalszego debugowania:

1) Sprawdź, czy port 22 (SSH) jest otwarty na serwerze i routerze (przekierowanie portów).

2) Sprawdź, czy serwer SSH działa na twoim serwerze

3) Użyj ping, ssh -vpodczas łączenia i sprawdź, /var/log/auth.logaby debugować wszelkie dalsze problemy z połączeniem.

1) Na routerze: postępuj zgodnie z instrukcjami dotyczącymi routera

Na serwerze: sudo ufw status(chyba że używasz innego narzędzia do konfiguracji zapory) lub sudo iptables -L(metoda ogólna, ale złożone dane wyjściowe)

Aby otworzyć port 22: sudo ufw allow 22

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

2) Sprawdź, czy jest zainstalowany: dpkg -l openssh-server

Sprawdź, czy działa: service ssh statuslubps aux | grep sshd

3) Na łączącym się kliencie:

Na serwerze:

  • sudo less /var/log/auth.log

W razie potrzeby możesz sprawdzić dzienniki routera.

Oto skaner portów online: https://www.grc.com/x/ne.dll?bh0bkyd2

Myślę, że możesz używać narzędzi takich jak nmap lub inne, ale jeszcze ich nie znam.

Postępowanie ze zmieniającym się zewnętrznym adresem IP:

1) Uzyskaj konto dynDNS lub podobne: http://dyn.com/dns/

Listy dynamicznych dostawców DNS:

2) Innym rozwiązaniem jest skonfigurowanie zadania crontab, które regularnie wysyła pocztą e-mail twój zewnętrzny adres IP lub wprowadza do internetowej usługi magazynowania, takiej jak dropbox.

Oto skrypt, z którego korzysta mój przyjaciel:

    #!/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

Przekazywanie portów routera:

1) Najpierw ustal lokalny adres IP routera, uruchamiając:

ip route | grep default

Zwykle jest to coś takiego jak 192.168.xx

Alternatywne sposoby i inne rozwiązania systemu operacyjnego:

2) Korzystając z dowolnego komputera podłączonego lokalnie do routera, uzyskaj dostęp do wcześniej znalezionego adresu IP, np. Przez http://192.168.1.1 . Powinno to wywołać interfejs konfiguracji routera.

3) Kolejne kroki różnią się w zależności od routera. Oto jak to się robi na routerze z OpenWRT, na przykład:

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

KIAaze
źródło
Dzięki za to przejdę teraz do sugestii.
Aesir
Ok wszystko, co musiałem zrobić, to przekierować port 22 mojego routera na serwer i to działa, dziękuję bardzo. Czy istnieje sposób, aby rozwiązać drugą część mojego pytania dotyczącego faktu, że mój zewnętrzny adres IP może ulec zmianie? - Właśnie widziałem Twoją edycję, przeczytam teraz.
Aesir,
Czy możesz wyjaśnić, w jaki sposób mogę przekierować port 22 mojego routera na serwer? Co to znaczy? Dziękuję Ci!
xxx222,
Zależy to od posiadanego routera, ale zwykle gdzieś powinna być strona przekierowania portów lub strona ustawień zapory. Oto jak to zrobić na routerze z OpenWRT: Newspaint.wordpress.com/2012/08/26/… Większość routerów można skonfigurować, przechodząc do 192.168.1.1 lub podobnego adresu 192.168.xx z przeglądarki, jeśli jesteś na ta sama sieć co router.
KIAaze
3

Domyślnie w Ubuntu (Desktop) SSH nie jest zainstalowany.

Możesz zainstalować go za pomocą następującego polecenia w terminalu:

sudo apt-get install openssh-server

Powinien on zainstalować i uruchomić usługę od razu.

kenorb
źródło
2
+1. Działa to świetnie, kiedy próbowałem. Byłem w stanie ssh na maszynę Ubuntu zaraz po uruchomieniu tego polecenia (dla Ubuntu 14.04 (Trusty Tahr), 64-bitowa edycja Desktop).
Peter Mortensen