Blog

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

    \"\"
    Для начала создадим алиасы устройств – вместо длинной записи ssh -l user 192.168.0.1 будем использовать, например, ssh router. Красиво и эстетично! Для организации такой красоты достаточно создать конфигурационный файл SSH (если у вас его еще нет).

    user$ mkdir ~/.ssh
    user$ cd ~/.ssh
    user$ nano config

    Примерно такого содержания

    Host router
        HostName 192.168.0.1
        User user
        Port 22

    Немного поясню:

    • Host – наш алиас к устройству, по которому будем вызывать
    • HostName – имя или IP адрес устройства
    • User – имя пользователя для подключения к устройству
    • Port – номер порта SSH, если переопределено

    Каждый алиас необходимо прописать соответствующим блоком, например, можно создать алиасы к одному устройству с разными именами пользователей. Теперь можно вызывать ssh router. Параметры для подключения к устройству router считаются из конфигурационного файла, который мы только что создали. Замечательно! Далее настроим, чтоб при подключении удаленное устройство не спрашивало пароль. Для таких целей достаточно создать пару RSA ключей и один из них поместить на удаленное устройство. Перед генерацией ключа проверим необходимые параметры в настройках системы на стороне клиента/etc/ssh/ssh_config.

    user$ sudo nano /etc/ssh/ssh_config

    Ищем нужный нам параметр, должно быть так

    ..
    IdentityFile ~/.ssh/id_rsa
    ..

    Подготовку сделали, можно генерировать пару RSA ключей

    user$ ssh-keygen -t rsa

    Отвечаем на несколько вопросов – нажимаем Enter ;-)

    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/user.ssh/id_rsa): <span style=\"color: red; font-weight: bold;\"><-Enter</span>
    Enter passphrase (empty for no passphrase): <span style=\"color: red; font-weight: bold;\"><-Enter</span>
    Enter same passphrase again: <span style=\"color: red; font-weight: bold;\"><-Enter</span>
    Your identification has been saved in /home/user/.ssh/id_rsa.
    Your public key has been saved in /home/user/.ssh/id_rsa.pub.
    The key fingerprint is:
    b6:a0:23:59:54:79:67:44:0f:e8:24:6b:5b:01:be:9b user@desktop
    The key\'s randomart image is:
    +--[ RSA 2048]----+
    |  o++=*o         |
    | . .oo.oo        |
    |  + o  o.        |
    | . =             |
    |  o +   S        |
    |   = + o         |
    |  E o .          |
    |   . .           |
    |                 |
    +-----------------+

    Пара RSA ключей готова, теперь публичный ключ необходимо передать на удаленное устройство. Но перед этой операцией проверим настройки на удаленном устройстве /etc/ssh/ssh_config.

    Ищем нужный нам параметр, должно быть так

    ..
    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile %h/.ssh/authorized_keys
    ..

    Параметр AuthorizedKeysFile предписывает, что принятые ключи будут храниться для каждого пользователя отдельно. Можно еще добавить следующие опции, хуже от этого не будет:

    • PermitRootLogin no – разрешается ли пользователю root логиниться по SSH. Лучше запретить, при необходимости права себе можно повысить, например, sudo.
    • PermitEmptyPasswords no – разрешить использовать пустые пароли. Даже не знаю для чего такую опцию оставили, если только для лабораторных отладок.
    • AllowUsers – указывает список пользователей, под которыми можно входить по SSH. Очень полезная опция! Если таковой нет в вашем конфиге – создайте ее. Формат AllowUsers user1 user2. В качестве логинов можно указывать user1@example.com (или user1@192.168.0.22), позволит логиниться пользователю user1 только с адреса example.com и 192.168.0.22
    • Port – указывает прослушиваемый демоном SSHD порт. По-умолчанию  – 22, для повышения безопасности лучше сменить его на что-то выходящее за пределы 1024 или еще лучше, за пределы 10000. К примеру поставить 55555, легко запоминается, а вот nmap\’ом не просканишь.

    Все готово. Передаем ключ на удаленное устройство.

    user$ ssh-copy-id router

    После успешного прохождения аутентификации ключ будет передан на удаленное устройство

    Now try logging into the machine, with \"ssh \'router\'\", and check in:
      .ssh/authorized_keys
    to make sure we haven\'t added extra keys that you weren\'t expecting.

    Пробуем подключится

    user$ ssh router

    Подключение успешно. Теперь подключаться к настроенным удаленным устройствам одно удовольствие. Вводим одну короткую команду и вуаля – вы уже управляете удаленным устройством. Надо заметить, что при подключении с другого устройства вам необходимо ввести все параметры подключения и пароль, но никто не запрещает вам повторить выше описанную процедуру и с этим устройством. Если, конечно, это необходимо. Приятной работы.