ForwardAgent и генерация SSH-ключей в Linux

Ключи

Иногда бывает необходимо ходить с сервера на сервер по цепочке. С сервера А на Б, потом с Б на В и т.д. Если не использовать ключей, не возникает никаких неожиданностей: идём на сервер А, вводим пароль; с сервера А идём на сервер Б, вводим пароль; с сервера ... ну вы поняли :) Всё понятно, всё логично — везде нужно авторизовываться, всегда нужно вводить пароль, никто не пустит просто так. Это требование безопасности.

Но у нас же есть ключи, с ними можно ходить без пароля, это удобно! Однако тут есть нюанс. Поставим эксперимент.

Идём на сервер A по ключу, входим без пароля — наш ключ опознан. Затем с этого сервера, по цепочке, соберёмся пойти на сервер B, и ... сюрприз: сервер B потребует логин-пароль. Какого ...? А всё просто: на сервере Б нет ваших ключей. Тут все (автор этих строк сперва, увы, тоже не ведал что делает) бросаются рассовывать свои ключи на все серверы, откуда собираются ходить куда-то дальше: всё же очевидно, нужно же ключ при себе иметь и будет счастье. Посыл верный, но решение проблемы выбрано в корне неправильное и даже вредное. Мало того, что все эти экземпляры ключей везде нужно поддерживать в актуальном состоянии (море возни), так ключ ещё и угнать могут, если его повсюду неосторожно разбрасывать, а это уже серьёзная проблема.

Авторы ssh вообще-то эту проблему решили и механизм придумали. Не только безопасный, но ещё и очень удобный. Решение проблемы называется SSH key forwarding. SSH клиент в состоянии «всё своё носить собой». Достаточно включить соответствующий механизм, и каждый запрос на проверку ключа будет передаваться через цепочку уже установленных шифрованных ssh соединений вашему ssh-агенту. Ну и ответ серверу так же по цепочке обратно передаваться. Ничего никуда копировать не нужно.

При чём тут гит? А суть та же: вы клонируете на удалённом сервере по ключу через тот же ssh. Технически это и есть ssh по цепочке. И решается проблема клонирований тем же самым включением форвардинга ключа.

ForwardAgent и генерация SSH-ключей в Linux

Если у вас ещё нет ключей, сгенерируйте. В Linux генерация ключа происходит с помощью команды ssh-keygen, которая задаст всего пару вопросов: расположение ключей (нужно оставить по умолчания) и пароль. Не рекомендую использовать пустые пароли. Очень не рекомендую — это брешь в безопасности служб, которыми вы пользуетесь. Если вирус угонит ваш ключ и даст злоумышленнику доступ к службам предприятия, это будет на вашей совести.

Не переживайте за удобство: в современных линуксах «открыть» ключ паролем достаточно один раз, в начале работы. Далее до самого окончания сеанса пароль за вас будет помнить ssh-агент. Один ввод пароля в день очень скромная цена значительно повышенной безопасности.

Генерация ключей ssh-keygen

После того, как ключи сгенерированы, нужно сообщить ssh-серверу свой открытый ключ. На Linux-системе это делается с помощью команды ssh-copy-id. После ввода пароля программа зарегистрирует на сервере открытый ключ и впредь ssh будет пускать на сервер без пароля (никаких дополнительных опций команде ssh при этом указывать не нужно - она сама найдет закрытый ключ). Также все sftp-клиенты (IDE, krusader, nautilus, тысячи их!) теперь автоматически будут логиниться по ключу.

Копирование ключей ssh-copy-id

Пользуемся ключами

Если вы в консоли, запустите агент:

ssh-agent

Если вы в графическом окружении, то агент для вас уже запущен вашим IDE. После генерации ключей для их загрузки в SSH-агент нужно дать команду:

ssh-add

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

Наконец, самое главное: включаем форвардинг. Просто добавьте в конфигурационный файл ~/.ssh/config следующую строку:

ForwardAgent=yes

Если вдруг нет такого файла, создайте, ну и права секурные заодно на всё выставьте:

chmod 700 ~/.ssh
echo "ForwardAgent=yes" >> ~/.ssh/config
chmod 600 ~/.ssh/config

Скрипт для коннекта к серверу

Небольшой "скрипт" на bash'е, запускающий gnome-terminal и коннектящийся к серверу:

#!/bin/bash
gnome-terminal --title="MyProjectDev" -x ssh yuriyvid@webdev.myproject.ru

Скрипт надо записать в файл, выдать права на исполнение - и можно запускать.

ForwardAgent и генерация SSH-ключей в Windows

Каталог PuTTY содержит в себе несколько программ для различных целей:

Файлы putty

Настройка ForwardAgent в PuTTY производится в несколько шагов.

Шаг 1

Первым делом необходимо сгенерировать секретный ключ с помощью программы PUTTYGEN. В ней задаются параметры нового ключа ключа (длина, тип):

Putty генератор ключей

После указания необходимых параметров жмем кнопку "Generate". В Верхней части программы появится Progressbar, который попросит водить мышкой в пустой области под ним. Водим мышкой туда-сюда до заполнения этого Progressbar'а. После этого должен появиться наш сгенерированный ключ.

Генерация ключей в putty

Далее нажимаем "Save Private Key" и выбираем место, куда хотим сохранить файл. Это наш секретный ключ.

Шаг 2

Теперь нам нужно выбрать ключ. Для этого запускаем программу PAGEANT.EXE и нажимаем "Add Key". В открывшимся диалоговом окне выбираем наш ключ:

Select private key file

После этого мы увидим, что ключ добавлен в список. Если вы указали PassPhrase во время генерации ключа, то агент попросит Вас ввести ее.

Так же для удобства работы создаем ярлык "PAGEANT.EXE", заходим в его свойства и в качестве параметра указываем путь к файлу ключа в поле Объект. Например, расположение объекта: C:\putty\PAGEANT.EXE расположение ключа: C:\keys\private_key. Тогда поле Объект будет выглядеть так:

C:\putty\PAGEANT.EXE "C:\keys\private-key.ppk"

При этом Агент будет запускаться вместе с Windows и выбирать ключ будет автоматически, то есть от пользователя потребуется только ввести PassPhrase при старте системы, если таковая имеется.

Pageant key list

Когда все будет готово, можно закрыть окно PAGEANT, Программа свернется в трей.

Шаг 3

Запускаем PUTTY.EXE - появится окно с настройками PuTTY. Первым делом переходим в раздел "Connection -> SSH -> Auth" и ставим там галочку напротив пункта "Allow Agent Forwarding" и выбираем все тот же наш секретный ключ.

Конфигурация putty

Затем переходим в раздел Session, вводим ip/имя нужного сервера, затем ниже вводим название для текущих настроек и жмем Save.

Настройки putty

И, наконец, нажимаем Open. Появится консольное окно, через которое вы будете подключены к серверу. Все!

Теги: 

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <i> <strong> <b> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <br>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
CAPTCHA на основе изображений
Введите код с картинки