The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Аутентификация на SSH сервере с использованием ssh-agent (ssh password)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: ssh, password,  (найти похожие документы)
From: Михаил Сгибнев <mixa(@).dreamcatcher.ru> Date: 2006-09-13 16:37:18 Subject: Аутентификация на SSH сервере с использованием ssh-agent
by Brian Hatch

Перевод: Сгибнев Михаил

Никто не любит вводить пароли. Если бы компьютеры, как люди, четко представляли себе, кто они такие и к чему они могут получить доступ, а к чему нет и не заставляли бы каждый раз напрягать клавиатуру... В моей последней статье я показал Вам, как создать SSH Identities/Pubkeys, который может использоваться как альтернатива вводу пароля. Однако, поскольку мы используем кодовую фразу для защиты, то получается, что мы просто поменяли один пароль на другой.

Сейчас мы разберем следующую ситуацию: мы возьмем доверительные отношения между хостами, данные нам Identity/Pubkey и для управления ключами будем использовать ssh-agent.

Запуск ssh-agent

Для запуска ssh-agent необходимо просто дать команду: При запуске агента он выведет на консоль некоторую информацию, которую Вы можете использовать для установки переменных среды. В настоящем примере используется синтаксис Bourne shell. Если Вы используете C-shell, такой как /bin/csh или /bin/tcsh, то переменные отобразились бы по другому. Если ssh-agent не может определить, какую оболочку Вы используете, Вы можете использовать ключи -s или -c соответственно для Bourne shell/C-shell.

Программа /usr/bin/ssh использует переменную среды SSH_AUTH_SOCK, чтобы знать, как войти в контакт с запущеным Вами ssh-агентом. Эту переменную необходимо определить. Самый простой способ сделать это - использовать функцию оболочки eval, Если Вам известна переменная SSH_AGENT_PID, то Вы можете завершить работу агента с помощью команды ssh-agent -k, хотя и команда kill по прежнему неплохо работает.

Загрузка ключей в агент

Сам по себе агент не очень полезен, пока в него не загружены ключи. Все управление ключами происходит через команду ssh-add, если Вы запустите ее без аргументов, то она загрузит "стандартные ключи" из $HOME/.ssh/identity, $HOME/.ssh/id_rsa и $HOME/.ssh/id_dsa. Если Ваши ключи защищены кодовой фразой (по другому и быть не может!), то ее потребуется ввести для декодирования ключей. Если кодовая фраза одинакова для всех ключей, то и ввести ее необходимо только один раз.

Итак: Итак, мы использовали ssh-add для добавления ключей по умолчанию, просмотра списка ключей и задания выборочных ключей. Обратим взор к следующему параграфу:

Удаление ключей из агента

Вы можете использовать команду ssh-agent -d для удаления ключей: Зачем удалять ключи из агента? Может быть несколько причин:

Слишком много ключей?

Серверы SSH позволяют Вам подтверждать свою подлинность конечное число раз. Каждая неудачная попытка увеличивает значение счетчика и при некотором критическом значении числа ключей, Вас вообще может перестать пускать на сервер из-за превышения числа попыток авторизации. Есть несколько способов решения данной проблемы:

Мероприятия по защите агента

ssh-agent создает unix domain socket и затем слушает все подключения от /usr/bin/ssh на этом сокете. В принципе Ваши ключи могут оказаться доступны любому, кто подключится к этому сокету.

При запуске агента, создается временный каталог /tmp/, с установленными правами доступа (0700) и уже внутри него создается сокет с правами (0600). Однако пользователь root по преженму имеет доступ к этому сокету, также он может произвольным образом поменять права доступа к сокету. Это плохая новость. Хорошая новость состоит в том, что ключи пригодны для использования только при запущеном агенте, root мог бы использовать агент для авторизации на других системах, но нельзя получить доступ к ключам непосредственно. Это значит, что нельзя вот так просто взять ключи и использовать их на другой машине.

Можем ли мы воспрепятствовать root получить доступ к нашему агенту, даже с учетом того, что он не обращает внимания на права доступа? Да, можем, если будем использовать опцию -c при импорте ключей в агента. В этом случае будет сделан запрос на подтверждение при каждой попытке авторизации на сервере с помощью программы ssh-askpass. Эта программа выскочит на вашем X11 рабочем столе и будет просить о подтверждении каждый раз перед использованием ключа.

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

Перенаправление агента

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

Как фактически работает форвардинг пакетов? Короче говоря, агент выполняется на одной машине, и каждый раз Вы, соединяясь с SSH сервером с форвардингом агента, сервер создает 'туннель' назад через SSH подключение с агентом, так что он становится доступен для любых дальнейших SSH подключений.

Скажем, мы находимся на нашем рабочем столе, мы соединяемся по SSH с сервером управления с возможностью форвардинга агента, и с сервера управления идем по SSH на наш почтовый сервер. Что получается: Используя форвардинг агента Вы сохраните время и клавиатуру.

Также обратите внимание, что, так как ваш агент доступен любой машине, с которой Вы соединяетесь. Соответственно и пользователю root этой машины. Будьте бдительны!

Глобальное отключение перенаправления

Если у Вас нет серьезных причин разрешать перенаправление, то проверьте соответствующий параметр в глобальном файле конфигурации ssh_config, который обычно расположен в /etc/ или /etc/ssh/ . Должно быть:

Перенаправление агента из командной строки

Для перенаправлении агента из командной строки, используйте опцию -A: Опция -a отключает форвардинг, что является значением по умолчанию.

Перенаправление агента из файла конфигурации

Если у Вас есть хост, на котором Вы всегда используете перенаправление и Вы не хотите постоянно использовать флаг -A, то Вы можете сделать для этих хостов записи в ~/.ssh/config: Хотя запись Host * должна иметься в глобальном файле конфигурации, я предпочитаю иметь ее и в локальном файле.

Прочие возможности

Есть еще несколько дополнительных флагов для ssh-add и ssh-agent:

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2023 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру