More than dev, less than architech.
0,0
рейтинг
1 сентября 2011 в 17:58

Разработка → Вы еще не авторизуетесь по ключам? Тогда мы идем к вам из песочницы tutorial

Этой заметкой я хочу показать, что использовать ключи для авторизации это просто.

Начнем с того, что нам понадобится PuTTY.
Идем на http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html и качаем следующее:
PuTTY — ssh-клиент
Pageant — агент для хранения ключей (зачем объясню позже)
PuTTYgen — генератор ключей

Сначала сгенерируем ключи, потом настроим PuTTY, и в конце покажу как всем этим пользоваться.

Создадим папочку для PuTTY и все скинем туда.
Содержимое папки

Запускаем PuTTYgen выбираем "Type of key to generate" SSH-2 RSA и 2048-битный ключ.
Основное окно PuTTYgen

Жмем Generate. Следуя указациям, хаотично перемещаем мышку.
Генерация ключей

После генерации нам предстанет следующее.
Вид после генерации

В верхнем поле публичный ключ, который будет храниться у принимающей стороны.
Ах да, я забыл рассказать как происходит непосредственная авторизация с помощью ключей.

Для наглядности возьмем server и client.
client сообщает server'у свой публичный ключ любым доступным способом. Беспокоиться, что кто-то узнает этот ключ не стоит.
Авторизация происходит следующем образом:
дальше следует объяснение человека, который не читал соответствующей литературы, поэтому описывает так, как он себе это представляет
client обращается к server'у и они обмениваются публичными ключами.
на основании этого server авторизует client'а, дает соответствующие права.

Это было небольшое отступление, вернемся к PuTTYgen.

В верхнем поле публичный ключ, который будет храниться у принимающей стороны.
Key fingerprint — отпечаток ключа.
Key comment — комментарий к ключу, я обычно указываю машину, на которой это ключ используется.
Key passphrase — парольная фраза к приватному ключу. Ее следует сделать сложной. Конечно можно оставить пустой, и тогда при авторизации не будет требоваться пароль, но дальше я покажу, что даже с сложным паролем к ключу можно авторизовываться без повторного ввода пароля, будто пароля и нет.
Confirm passphrase — подтверждение парольной фразы.

Дальше нужно сохранить сгенерированные ключи. Остановлюсь только на приватном ключе. При сохранении (Save private key) предложится сохранить ключ с расширением .ppk. Он будет использоваться Pageant в дальнейшем.

Перед тем, как мы перейдем к настройке PuTTY, расскажу о возможности восстановить публичный ключ из приватного с помощью PuTTYgen.
Для этого нужно нажать кнопку Load. Указать приватный ключ. Ввести парольную фразу (если имеется) и отобразится точно такое же окно, как на предыдущем скриншоте.

Теперь запустим PuTTY и сделаем предварительные настройки.
Выберем Default Settings и нажмем Load.
Перейдем слева на Session->Logging, отметим галочкой Printable output. В поле Log file name впишем logs\&H_&Y-&M-&D-&T.log, уберем галочку Flush log file frequently.
Таким образом, мы указали, что хранить логи будем в папочке logs, рядом с PuTTY.exe с именами на подобии 192.168.1.6_2011-08-29-101304.log
Перейдем на вкладку Window->Translation. И выберим в списке Remote character set UTF-8, чтобы не было проблем с кодировкой.
В Connection->SSH->Auth проверим, что стоит галочка напротив Attempt authentication using Pageant и укажем путь к приватному ключу в графе Private key file for authentication.
После этого вернемся на вкладку Session нажмем сохранить, чтобы указанные настройки были по-умолчанию.

Пришло время показать работу авторизации, используя ключи, на практике.
Воспользуемся агентом для хранения ключей Pageant.

После запуска, появится иконка в области уведомлений. Жмем правой кнопкой, Add key.
Добавить ключ

Выбираем ключ, указываем парольную фразу. Теперь ключ хранится в памяти.
Чтобы посмотреть ключи, можно выбрать пункт View keys.
Просмотреть ключи

Попробуем авторизоваться.
Открываем PuTTY. Указываем IP. Жмем Open.
В первый раз выскочит предупреждение, что раньше мы не использовали ключ для авторизации на этом сервере. Когда такое возникает впервый раз, это нормально, но если такое возникает на сервере, на котором мы уже авторизовывались, то либо сервер сменил свои ключи, либо это фейковый сервер.
Предупреждение, о отсутствии в кеше слепка ключа сервера

Вводим логин. Жмем Enter. И мы автоматически авторизовались.
Успешное подключение по ssh

Покажу еще, на примере Komodo Edit.
Выбираем File->Open->Remote open
Пункт в меню

Выбираем Accounts. Потом New Server.
В Server Type указываем SCP. В Name произвольное название для сервера. В Hostname ip сервера (или доменное имя). В User Name логин пользователя.
Жмем Add, затем OK.
В верхнем выпадающем меню выбираем наш сервер. Если сервер разрешает авторизацию по ключам, то мы увидим список директорий на сервере, выбираем нужный файл и редактируем (при наличии прав на запись у пользователя).
image

PS: Следующая ошибка появляется в том случае, если сервер поддерживает только авторизацию по ключам, а у вас не включен Pageant.
Error: Remote SSH server does not allow password authentication. Allowed types are: publickey

PS2:
Не пропустите полезную статью Памятка пользователям ssh
Vladislav @ahmpro
карма
9,0
рейтинг 0,0
More than dev, less than architech.
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (38)

  • +22
    Для пользователей линукса добавьте «инструкцию», там кажется одна команда
    ssh-keygen -t rsa
    
    и ключик появляется в директории ~/.ssh/
    • +27
      затем надо положить ключ на сервер:
      ssh-copy-id server_ip
      • +17
        Brilliant!
        А я всю жизнь как дурак делал:
        cat .ssh/id_rsa.pub | ssh user@server "cat >> .ssh/authorized_keys"
    • +5
      можно еще короче
      ssh-keygen
  • –2
    Я бы предпочел решение с галочкой «запомнить пароль», чем 30-шаговый геморрой с каждым из своих SSH аккаунтов. Как минимум для некритичных серверов.
    • +3
      Не знаю, умеет ли putty, но kitty точно умеет хранить пароли.
      • 0
        Не умеет, но умеет принимать пароль из параметра командной строки -pw.
        Можно сохранить сессию, либо в сессии указать логин -load «mysession», либо в командной строке -l mylogin
        Но это еще менее секурно, чем ключи, например палится process explorer-ом, который в command line говорит все ключи, с которыми было запущенно приложение.

        Собственно всё есть в доке.
        • –1
          В командной строке — да, небезопасно. А если нормальное хранилище паролей на диске, то вполне. Украсть файл ключа и украсть файл с паролем — вполне равнозначные задачи, зато нам не нужно конфигурировать каждый сервер и каждый аккаунт с использованием кучи команд и трех программных средств.
          • –2
            Я надеюсь, что в глубине души, Вы понимаете, что глубоко заблуждаетесь.
            Когда у вас есть ключ. это уже 1 команда и 0 программных средств.
            Хотя, учитывая, что Вы пользователь виндоуса, и не понимаете всей серьезности безопасности, а так же, скорее всего, вы слабо представляете, что такое ключи, то вам проще использовать пароли — до первого трояна.
            • +2
              Самое худшее что можно сделать в диалоге — высказать обвинение в адрес собеседника, основав его на некоей предпосылке, которая окажется ложна. Нет, я не пользователь виндоуса:)

              И да, я веб-разработчик серверных решений, мне нужно много тестировать их т.к. они идут клиентам и за них дорого платят. Для этого на clodo я создаю множество виртуалок на час/день/сутки, обкатывая свои решения в различных конфигурациях, и потом удаляя виртуалки. При этом мне совершенно плевать на безопасность этих машин т.к. они все равно будут удалены. Я готов использовать любой, самый небезопасный метод, лишь бы он экономил мне время. Время — вот что критично при тестировании.
              • 0
                Ну тогда вам тем более прямая дорога к ключам. Сгенерировав однажды свой ключ (ssh-keygen), вам нужно лишь прописать его на сервере (ssh-copy-id server). Вуаля :) Не нужно организовывать безопасное хранилище паролей, искать галочку «сохранить пароль» или думать как его скормить ssh клиенту. А если есть возможность зашить публичный ключ в шаблон виртуалки — так вобще ничего делать не нужно :)
                • 0
                  Про ssh-copy-id не знал, спасибо вам и другим в эом топике, кто про нее написал. Осталось найти с какого порта ее поставить…
                  • 0
                    > порта

                    FreeBSD?
                  • 0
                    Обычно это openssh-clients
                    В федоре это такой sh-скриптик: paste.org.ru/?3fcf2a
              • 0
                > дорого платят
                жалко клиентов и удачи вам, может лучше податься в менеджеры, если способны продать себя дорого, а работу отдать тем, кто может ее сделать качественно?
      • +4
        Спасибо за наводку на kitty!
    • 0
      Прошу простить. Перед публикацией, я воспользовался поиском, однако указанные топики не нашел.
  • 0
    Кстати, а никто не пробовал генерировать в винде ключик длиной 32кбит? :-)
  • +1
    Слава богу в убунте можно обойтись «as it is».
  • +6
    Ключи проще в никсах генерировать, чем в puttygen :)
    • +2
      1) image

      2) image

      3) image
  • +10
    Ох и любите вы всё замазывать.
  • 0
    Настраивал авторизацию по ключам с OpenWRT( dlink dir 615) на Mikrotik( 750GL). Хотелось сделать чтобы по нажатию кнопки на Dlink микротик выполнял определённые команды.

    Долго мучался с авторизацией по ключам, генерировал и в убунту и в PuttyGen. Оказалось, что приватный ключ в OpenWRT хранится в каком-то странном формате, а публичный ключ выводится в текстовом виде и его нужно подогнать под формат понятный микротику.
  • +21
    Начнем с того, что нам понадобится PuTTY.

    Нет.
  • +27
    Абсолютно бесполезная статья от человека, который не различает аутентификацию и авторизацию.
    • НЛО прилетело и опубликовало эту надпись здесь
  • –6
    Спасибо.
    Ещё бы для виндовых RDP инструкцию…
  • –4
    Спасибо, какраз вчера искал нечто подобное
  • +1
    Можно упростить, если только для ssh через PuTTY и только под одним пользователем:

    1. Генерируем ключи; добавляем публичный ключ на сервер;
    2. В настройках PuTTY Connection->Data->Auto-login username указываем пользователя под которым логиниться;
    3. В настрйоках PuTTY Connection->SSH->Auth->Private key file for authentication указываем приватный ключ.

    Сохраняем сессию и, по желанию, делаем ярлык на запуск PuTTY с этой сессией. Итого — за один клик входим на сервер по ssh.
    • 0
      Ну, не работает оно так. Как в инструкции в статье, как вы пишите делаю, не работает. По ключу не пускает на OpenSSH сервер.
      Расскажите, что там такого ещё нужно добавить. Искренне в толк не возьму. И соплеменников моих не работает.
      • 0
        Проверьте права на ~/.ssh, ~/.ssh/authorized_keys, sshd очень не любит слишком широкие права на чтение/запись
        [ahmpro@orion ~]$ ls -la | grep .ssh
        drwx------  2 ahmpro ahmpro 4096 Sep  8 08:02 .ssh
        [ahmpro@orion .ssh]$ ls -la
        total 12
        drwx------ 2 ahmpro ahmpro 4096 Sep  8 08:02 .
        drwx------ 6 ahmpro ahmpro 4096 Sep  8 08:53 ..
        -rw------- 1 ahmpro ahmpro  388 Sep  8 08:02 authorized_keys
        

        ну и самособой смотреть логи
  • +4
    Прошу заметить, что авторизация по ключам (в отличие от пароля) дает возможность авторизации в SFTP под одним логином нескольким субъектам (людям, скриптам) с разными ключами.
    Зачем? Ну например: архивы с нескольких компьютеров скидываются на центральный сервер в общую папку по SFTP (не FTP!). Под виндой- PSCP.EXE под никс-scp.
    В этом случае не требуется заводить десятки юзеров типа: backup1...backupN — достаточно открытые ключи всех источников разместить в /home/backup/.ssh/authorizedkeys
  • +2
    Кто нибудь скажет мне логическое объяснение того, почему в putty свой формат ключей (не, puttygen конечно есть, но ЗАЧЕМ свой формат???)
  • +1
    Сумбурная статья.

    Воспользовался этой статьей:
    habrahabr.ru/blogs/linux/39254/

    Написана два года назад ровно на ту же тему. Сжато и по делу. :)

    Вопрос: теперь я могу залогиниться без пароля, но для использования sudo все равно нужно пароль вводить каждые 20 минут? :(
    • 0
      Нашел, как отменить запрос пароля для sudo.

      Открываем файл sudoers на редактирование специальным способом (просто так его править нельзя):
      $ sudo EDITOR=nano visudo

      В конец файла прописываем строчку:
      vpupkin ALL=(ALL) NOPASSWD: ALL

      Первое слово — это ваш логин. Обязательно суйте это в конец, т. к. порядок директив важен.

      Затем Ctrl+O для сохранения (unix way, ага) и Ctrl+X для выхода.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.