вторник, 23 января 2018 г.

SSH — настройка доступа к серверу, команды и подключение без паролей


Что такое SSH

SSH (Secure Shell) — это сетевой протокол, предназначенный для удалённого управления сервером и передачи данных по зашифрованным TCP соединениям. Большинство хостингов, даже виртуальных, сегодня предоставляет доступ как по FTP, так и по SSH. На мой взгляд, это здорово, SSH намного удобнее и безопаснее в использовании.

Настройка SSH

У сайта sheensay.ru появился свой канал в Telegram.
В нём будут публиковаться ссылки на новые материалы и интересные, по моему мнению, публикации.
Спасибо, уже подписался
Настройка будет происходить под выделенный сервер, VDS, VPS на Debian. Конфигурационный файл располагается тут: /etc/ssh/sshd_config.
Если у вас обычный хостинг, всё и так должно быть настроено как надо, переходите к разделу авторизации по ключам.
По умолчанию, демон SSHD (именно в него мы вносим изменения) не нуждается в каких-либо настройках и работает нормально. Мы внесём лишь пару небольших изменений с целью ограничить доступ нежелательных лиц к серверу.
В результате внесения неправильных изменений в конфигурационный файл вы можете потерять доступ к серверу по ssh, поэтому убедитесь, что у вас есть альтернативные варианты для доступа к нему, например, с помощью панели управления ISPManager.

Как ограничить доступ по SSH

Все изменения вносятся в /etc/ssh/sshd_config
Чтобы изменения вступили в силу, необходимо перезагрузить SSH

Сменить порт

1
Port 9724
Теперь при авторизации вам нужно вместо стандартного 22 порта указывать 9724.
Способ очень простой и действенный против большинства простых ботов хакеров, которые стучатся в стандартные порты. Тут главное не создать конфликт с другими службами и подобрать заведомо неиспользуемое число.

Запретить авторизацию под root

1
PermitRootLogin no
По умолчанию no. Если yes, можно авторизовываться под рутом. Под root работать небезопасно, лучше создать своего пользователя и работать под ним.
Если вы авторизованы не под root, перед всеми консольными командами нужно добавлять sudo — расшифровывается как Substitute User and DOподмени юзера и делай (под ним). Например, позволяет исполнять команды от имени суперпользователя root.

Уменьшить число попыток авторизации

1
MaxAuthTries 2
Количество попыток ввода пароля. По умолчанию 6. При неудачном переборе сеанс связи обрывается.

Уменьшить время ожидания авторизации

1
LoginGraceTime 30s
По умолчанию, 120 секунд может длиться сеанс авторизации. По истечению этого времени он обрывается. 2 минуты на авторизацию — это перебор, всё это время сервер держит связь открытой, что очень нерационально. Полминуты за глаза хватит.

Закрыть доступ по IP

Если доступ нужен только вам, самым простым и надёжным будет закрыть доступ отовсюду, кроме вашего IP или, если он динамический, то диапазона IP.
  1. Открываем /etc/hosts.allow и добавляем туда
    1
    SSHD: 192.168.1.1
    где 192.168.1.1 — ваш IP. Если у вас динамический IP, определите IP с маской подсети и запишите Вашу подсеть вместо IP, например:
    1
    SSHD: 192.168.0.0/16
  2. Открываем /etc/hosts.deny и добавляем туда:
    1
    SSHD: ALL
Теперь никто, кроме вас, не сможет авторизоваться на сервере по SSH.

Авторизация SSH по ключам

Намного безопаснее, удобнее и правильнее будет настроить ssh авторизацию без пароля. Для этого будет использоваться авторизация по ключу.
Для настройки нам понадобится файловый менеджер, например, Far Manager с плагином WinSCP, и Putty
Итак, вот инструкция:
  1. Распаковываем архив, открываем PUTTYGEN:
    Открываем PuTTY Key Generator
    Открываем PUTTYGEN (PuTTY Key Generator)
  2. Вводим и выбираем всё как на скриншоте: SSH-2 RSA и ключ длиной 2048 и жмём Generate
    Во время генерации ключей водим мышкой по специальному полю под статусной строкой, чтобы пошла генерация ключей (она использует набор из координат мыши)
    Генерируем ключи
    Генерируем ключи
  3. Теперь нужно заполнить Key Passphrase (это пароль для доступа к приватному ключу). Заполнять не обязательно, но его наличие повысит безопасность, так как любой, кто имеет доступ к приватному ключу, сможет с его помощью авторизоваться на сервере по ssh:
    Сохраняем ключи
    Сохраняем ключи
  4. Сохраним приватный ключ где-нибудь в надёжном месте — Save private key. Назовём его, к примеру, sheensay.ru.ppk
  5. А вот публичный ключ нужно сохранить на сервере, куда устанавливаем доступ — Save public key Назовём его sheensay.ru.pub. Авторизуемся по ssh по паролю и переходим в директорию пользователя, под которым будет происходить авторизация.
    В целях безопасности нежелательно работать под рутом, но я покажу пример команд для root, а вы уже скорректируете под своё имя пользователя
    Итак, копируем файл sheensay.ru.pub в /root/.ssh/.
    Далее нужно импортировать данные в файл authorized_keys
    1
    ssh-keygen -i -f /root/.ssh/sheensay.ru.pub >> /root/.ssh/authorized_keys
    После sheensay.ru.pub можно удалить
  6. Осталось настроить подключение. Я пользуюсь Far Manager в связке с плагином WinSCP.
    Far Manager 3 имеет встроенный NetBox, последователя WinSCP, так что, ничего дополнительно устанавливать не придётся.
    Открываем Far Manager, Alt + F1, выбираем WinSCP, далее Shift + F4 и настроим наше подключение. Допустим, мы сохранили приватный файл в D:/SSH/
    При настройке нужно будет указать IP или доменное имя на нём для доступа к серверу, порт, на котором висит SSH, имя пользователя и путь к приватному файлу-ключу
    Настройка подключения по SSH
    Настройка подключения по SSH
  7. Подключаемся. Если при генерации ключей вы вводили пароль, то в этом случае при подключении у вас будет запрашивать пароль к приватному файлу.
Подключение настроено. Если что-то сделали не так, при авторизации появится ошибка Server refused our key, то есть Сервер не принял наш ключ. В этом случае пройдитесь по всем пунктам последовательно и поищите ошибку

Отключить авторизацию по паролю

Теперь, когда всё настроено, совсем не лишним будет отключить авторизацию по паролю. Для этого внесём изменения в конфигурационный файл
1
PasswordAuthentication no

Как перезагрузить SSH

  • Debian, Ubuntu
    1
    service ssh restart
    или
    1
    /etc/init.d/ssh restart
  • CentOS, FreeBSD, Fedora
    1
    service sshd restart
    или
    1
    /etc/init.d/sshd restart

Комментариев нет:

Отправить комментарий