Подключение к серверу Ubuntu через SSH извне

Недавно я установил Ubuntu Server 12.04 (Precise Pangolin) и намерен использовать его в основном в качестве файлового сервера. Я совершенно новичок в Linux, так что это довольно большая кривая обучения. Вчера я смог настроить шпатлевка на моем компьютере с Windows & nbsp; 7 с использованием пары ключей SSH, чтобы я мог администрировать сервер Ubuntu со своего рабочего стола. Это прекрасно работает при условии, что обе машины находятся в одной сети.

В случае с моим ноутбуком (MacBook Air) он не всегда может находиться в одной и той же сети. Возможно ли подключиться к серверу Ubuntu с моего ноутбука через SSH, когда он находится в другой сети?

Я установил демон avahi, чтобы имя хоста для сервера транслировалось по локальной сети, и настроил маршрутизатор так, чтобы он всегда назначал серверу один и тот же IP-адрес. Кроме того, единственное, что я установил на сервере, это OpenSSH где я отключил аутентификацию по паролю, чтобы вы могли подключиться только с помощью пары ключей.

Я думал, что смогу сделать что-то подобное с терминала на моем ноутбуке:

ssh my.external.ip.address user@hostname.local

Когда я пытаюсь выполнить эту команду, я получаю сообщение об ошибке:

ssh: подключение к хосту my.external.ip.address порт 22: время ожидания операции истекло

Я тоже пробовал

ssh my.external.ip.address user@servers.local.ip.address

и я получаю то же сообщение об ошибке, что и раньше. Итак, это должно дать вам представление о том, что я пытаюсь сделать, но возможно ли это, и если да, то как мне это сделать?

Предполагая, что я могу настроить внешнее соединение через ssh со своего ноутбука, существует вероятность того, что мой интернет-провайдер изменит мой внешний IP-адрес, что приведет к разрыву внешнего соединения. Я хотел бы иметь возможность надежно подключаться, то есть, если мой интернет-провайдер изменит внешний IP-адрес, я все равно смогу удаленно подключаться к серверу, не зная, каков новый внешний IP-адрес.

Прежде всего, правильная команда - это:ssh user@my.external.ip.address

И маршрутизатор должен быть настроен на пересылку SSH-порта 22 на локальный IP-адрес вашего сервера.

Для дальнейшей отладки:

1) Убедитесь, что порт 22 (SSH) открыт на вашем сервере и на маршрутизаторе (переадресация портов).

2) Убедитесь, что на вашем сервере запущен SSH-сервер

3) Использование ping, ssh -v во время подключения и посмотрите на /var/log/auth.log для устранения любых дальнейших проблем с подключением.

1) На вашем маршрутизаторе: следуйте конкретным инструкциям маршрутизатора

На вашем сервере: sudo ufw status (если вы не используете другую утилиту настройки брандмауэра) или sudo iptables -L (общий метод, но сложный вывод)

Чтобы открыть порт 22: sudo ufw allow 22

ср https://help.ubuntu.com/12.04/serverguide/firewall.html

2) Убедитесь, что он установлен: dpkg -l openssh-server

Проверьте, что он запущен: service ssh status или ps aux | grep sshd

3) На подключающемся клиенте:

  • ping my.external.ip.address
  • ssh -v user@my.external.ip.address

На сервере:

  • sudo less /var/log/auth.log

При необходимости вы также можете проверить журналы маршрутизатора.

Вот онлайн-сканер портов: https://www.grc.com/x/ne.dll?bh0bkyd2

Я думаю, вы можете использовать такие инструменты, как nmap или другие, но я еще не настолько хорошо с ними знаком.

Работа с изменяющимся внешним IP-адресом:

1) Создайте учетную запись DynDNS или аналогичную учетную запись: http://dyn.com/dns/

Списки динамических поставщиков DNS:

2) Другое решение - настроить задание crontab, которое регулярно отправляет вам ваш внешний IP-адрес по электронной почте или помещает его в онлайн-службу хранения, такую как dropbox.

Вот сценарий, который использует мой друг:

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

Переадресация портов маршрутизатора:

1) Сначала определите локальный IP-адрес вашего маршрутизатора, выполнив:

ip route | grep default

Обычно это что-то вроде 192.168.x.x.

Альтернативные способы и другие решения для ОС:

2) Используя любой компьютер, подключенный локально к маршрутизатору, получите доступ к ранее найденному IP-адресу, т.е. через http://192.168.1.1 например. Это должно вызвать интерфейс настройки маршрутизатора.

3) Следующие шаги зависят от вашего маршрутизатора. Вот как это делается, например, на маршрутизаторе с OpenWRT:

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

По умолчанию в Ubuntu (Desktop) SSH не установлен.

Вы можете установить его с помощью следующей команды в терминале:

sudo apt-get install openssh-server

Он должен сразу же установить и запустить службу.