Доступ по SSH

Удалённое управление операционной системой и организация туннелей для передачи данных

Время чтения: 5 мин

Кратко

Секция статьи "Кратко"

SSH — это протокол прикладного уровня для удалённого управления операционной системой с шифрованием данных. Протокол используется для подключения к удалённым компьютерам и обеспечивает доступ к ним с помощью терминала. Вы можете выполнять команды в терминале, словно вы находитесь на своём компьютере. Кроме доступа к терминалу по SSH, можно передавать видео- и аудиопотоки, а также файлы.

Как понять

Секция статьи "Как понять"

С 2006 года протокол входит в число документов Интернет-стандарта. Сейчас SSH практически полностью заменил протокол Telnet, главным недостатком которого была его уязвимость к ряду атак. Первая версия протокола позволяла защититься от атак, основанных на прослушивании трафика. Вторая версия протокола, которая используется сейчас практически повсеместно, решила проблему защиты от атак типа «человек посередине».

По протоколу к удалённому узлу можно получить доступ тремя способами (в порядке снижения уровня безопасности):

  • по ключу;
  • по паролю;
  • по IP-адресу.

Доступ по ключу является предпочтительным вариантом с точки зрения безопасности. Используется ассиметричное шифрование, о котором подробно можно прочитать в статье «Шифрование». В случае доступа по ключу пользователь, обладающий закрытым ключом, сможет успешно пройти аутентификацию. Для соединения с удалённым узлом на него нужно предварительно передать открытый ключ.

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

Доступ по IP-адресу практически всегда запрещают, поскольку, несмотря на защищённое соединение, такой вариант не может обеспечить должной защиты: IP-адрес легко подделать.

Как использовать

Секция статьи "Как использовать"

Многие хостинг-провайдеры позволяют подключаться по SSH для управления сервером или для безопасной передачи файлов по сети. Для того чтобы работать по SSH, нужно сгенерировать пару открытого и закрытого ключа. Можно воспользоваться специальными утилитами с графическим интерфейсом, но можно всё сделать и в терминале. Для генерации пары ключей нужно воспользоваться командой:

        
          
          ssh-keygen
          ssh-keygen

        
        
          
        
      

Необходимо ответить на вопросы программы:

  1. Выбрать путь для хранения ключей (по умолчанию это ~/.ssh/id_rsa).
  2. Задать пароль для доступа к ключу (по необходимости). Без пароля никто не сможет получить доступ к закрытому ключу.

В итоге в указанной директории появятся два файла. Один с выбранным именем без расширения, второй с тем же именем, но с расширением .pub. Второй файл является публичным ключом. Эти файлы можно копировать между компьютерами. Если на компьютере есть ключ, то вы пройдёте аутентификацию.

У хостинг-провайдеров практически всегда есть возможность указать в интерфейсе открытый ключ, чтобы можно было устанавливать его автоматически при создании аккаунта в случае предоставления услуги обычного хостинга (только ресурсы на уже настроенном сервере компании) или при создании виртуального сервера с уже настроенным аккаунтом в случае предоставления услуги выделенного сервера. Чтобы скопировать ключ в буфер обмена, можно воспользоваться командой:

        
          
          pbcopy < ~/.ssh/id_rsa.pub
          pbcopy < ~/.ssh/id_rsa.pub

        
        
          
        
      

Есть и альтернативные способы, если вы используете выделенный сервер. Как правило, вы будете работать с сервером на базе одной из операционных систем семейства Linux. Провайдер всегда создаёт пользователя root со случайно сгенерированным паролем. Чтобы перенести файл открытого ключа на удалённый сервер через интерфейс командной строки, нужно будет установить соединение с сервером по SSH, используя root и пароль, доступный в интерфейсе управления выделенным сервером у провайдера. В последствии доступ по паролю можно (даже нужно) отключить.

Рассмотрим пример: хостинг-провайдер создал сервер для вас, IP-адрес которого 100.110.120.130.
Если вы не будете создавать других пользователей (это плохо с точки зрения безопасности, но для личных экспериментов вполне приемлемо), то можно сразу скопировать ключ на сервер командой:

        
          
          ssh-copy-id -i ~/.ssh/id_rsa.pub root@100.110.120.130
          ssh-copy-id -i ~/.ssh/id_rsa.pub root@100.110.120.130

        
        
          
        
      

После ввода пароля, ключ будет скопирован на удалённый сервер.
Ещё одним способом является копирование ключа в ручную. Для этого выполним следующую команду, которая скопирует ключ на сервер в директорию /tmp:

        
          
          scp ~/.ssh/id_rsa.pub root@100.110.120.130:/tmp
          scp ~/.ssh/id_rsa.pub root@100.110.120.130:/tmp

        
        
          
        
      

После введения пароля нужно будет зайти на сервер. Для соединения с сервером нужно выполнить команду и ввести пароль ещё раз:

        
          
          ssh root@100.110.120.130
          ssh root@100.110.120.130

        
        
          
        
      

После этого нужно переместить файл публичного ключа в директорию .ssh в домашней директории пользователя. Для пользователя root:

        
          
          mkdir /root/.sshmv /tmp/id_rsa.pub /root/.ssh/authorized_keys
          mkdir /root/.ssh
mv /tmp/id_rsa.pub /root/.ssh/authorized_keys

        
        
          
        
      

Необходимо проверить или установить права на созданные директорию и файл, они должны быть следующими:

        
          
          chmod 700 /root/.ssh/chmod 600 /root/.ssh/authorized_keyschown root:root -R /root/.ssh/
          chmod 700 /root/.ssh/
chmod 600 /root/.ssh/authorized_keys
chown root:root -R /root/.ssh/

        
        
          
        
      
  1. разрешаем полный доступ к папке только владельцу;
  2. разрешаем редактирование файла только владельцу;
  3. устанавливаем владельца и группу пользователя root.

Если вы предоставляете доступ другому пользователю, то владелец и группа должны быть его.

Вы можете предоставить доступ нескольким людям, под одним пользователем, для этого просто вставьте их публичный ключ с новой строки в authorized_keys.

Проверяем: выходим из сервера и пробуем зайти вновь - на этот раз сервер у вас уже не спросит пароль.

Теперь можно запретить вход пользователю root по ssh с авторизацией по паролю.

Для этого необходимо открыть конфигурационный файл /etc/ssh/sshd_config (например, с помощью редактора vi или nano) и отредактировать настройку для доступа по паролю так:

        
          
          # Authentication:PermitRootLogin no
          # Authentication:
PermitRootLogin no

        
        
          
        
      

Сохранить изменения и перезапустить службу sshd.

        
          
          systemctl restart sshd
          systemctl restart sshd

        
        
          
        
      

На практике

Секция статьи "На практике"

Игорь Коровченко

Секция статьи "Игорь Коровченко"

Работа с GitHub по SSH

Секция статьи "Работа с GitHub по SSH"

Для работы по протоколу SSH вам понадобится настроить свой аккаунт на GitHub.

Лучше сгенерировать отдельный ключ, который будет удовлетворять требованиям безопасности GitHub. Для этого вам понадобится электронная почта вашего аккаунта:

        
          
          ssh-keygen -t ed25519 -C "your_email@example.com"
          ssh-keygen -t ed25519 -C "your_email@example.com"

        
        
          
        
      

После этого скопируйте ключ командой:

        
          
          # на macOSpbcopy < ~/.ssh/id_ed25519.pub# на Windowsclip < ~/.ssh/id_ed25519.pub# на Linuxxclip -selection clipboard < ~/.ssh/id_ed25519.pub
          # на macOS
pbcopy < ~/.ssh/id_ed25519.pub

# на Windows
clip < ~/.ssh/id_ed25519.pub

# на Linux
xclip -selection clipboard < ~/.ssh/id_ed25519.pub

        
        
          
        
      

В случае использования операционной системы на базе Linux необходимо будет поставить утилиту xclip, если она у вас ещё не установлена:

        
          
          sudo apt-get updatesudo apt-get install xclip
          sudo apt-get update
sudo apt-get install xclip

        
        
          
        
      

Затем в интерфейсе GitHub нужно будет щёлкнуть на иконку аккаунта, выбрать пункт «Settings», перейти на вкладку «SSH and GPG keys», слева нажать кнопку «New SSH key» или «Add SSH key». Введите название ключа в поле «Title» и вставьте из буфера обмена содержимое публичного ключа в поле «Key». Нажмите на кнопку «Add SSH key» и введите пароль для подтверждения. После этого вы будете иметь доступ к GitHub по протоколу SSH, а не только через HTTPS.