Внешнее соединение с сервером Ubuntu через SSH


25

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

В случае моего ноутбука ( 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-адрес.

Ответы:


23

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

И маршрутизатор должен быть настроен на переадресацию порта 22 SSH на локальный 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

cf 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.xx

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

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/


Спасибо за это, сейчас я рассмотрю предложения.
Aesir

Хорошо, все, что мне нужно было сделать, это перенаправить порт 22 на моем маршрутизаторе на сервер, и это работает, большое спасибо. Есть ли способ, которым я могу решить вторую часть моего вопроса относительно того, что мой внешний IP-адрес может измениться? - Только что видел твои правки, сейчас прочитаешь.
Aesir

Не могли бы вы объяснить, как я могу перенаправить порт 22 на моем маршрутизаторе на сервер? Что это значит? Спасибо!
xxx222

Это зависит от того, какой у вас маршрутизатор, но обычно где-то должна быть страница перенаправления портов или настройки брандмауэра. Вот как это сделать на маршрутизаторе с OpenWRT: magazaint.wordpress.com/2012/08/26/… Большинство маршрутизаторов можно настроить, перейдя по адресу 192.168.1.1 или аналогичному адресу 192.168.xx из браузера, если вы находитесь на та же сеть, что и маршрутизатор.
KIAaze

3

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

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

sudo apt-get install openssh-server

Он должен установить и запустить сервис прямо сейчас.


2
+1. Это отлично сработало, когда я попробовал. Я смог подключиться к машине с Ubuntu сразу после запуска этой команды (для Ubuntu 14.04 (Trusty Tahr), 64-разрядная версия Desktop).
Питер Мортенсен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.