Управление ключами SSH с помощью агента

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Автор: Игорь Чубин
Короткий URL: ssh-agent


На этой странице описывается что такое ssh-agent, зачем он нужен и как правильно его использовать.


Вводить парольную фразу каждый раз, когда используется ssh не очень удобно. Было бы намного проще ввести ее один раз при входе в систему, сохранить где-нибудь, а затем все время пользоваться. Такую задачу позволяет решить специальная программа — ssh-agent.

ssh-agent хранит секретные ключи и, когда нужно, пользуется ими. Программа (например, ssh), когда ей понадобится воспользоваться секретным ключом, не делает этого сама, а обращается к ssh-agent 'у, который в свою очередь уже сам пользуется известными только ему данными о секретных ключах. Таким образом, секретные ключи не разглашаются никому, даже программам принадлежащим самому пользователю.

Программу ssh-agent можно использовать двумя разными способами:

ssh-agent опции
ssh-agent опции команда

В обоих случаях ssh-agent создает файл-сокет с именем /tmp/ssh-XXXXXXXX/agent.ppid, через который осуществляется взаимодействие с агентом. Всем дочерним процессам агент при помощи переменных окружения SSH_AUTH_SOCK (в которой хранится имя файла-сокета) и SSH_AGENT_PID (в которой хранится идентификатор процесс агента) сообщает информацию о том, как с ним можно связаться.

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

SSH_AUTH_SOCK=/tmp/ssh-XXt4pHNr/agent.5087; export SSH_AUTH_SOCK;
SSH_AGENT_PID=5088; export SSH_AGENT_PID;
echo Agent pid 5088;

При указании ключа -c агент использует синтаксис C Shell. По умолчанию (и при явном указании ключа -s) используется синтаксис Bourne Shell. Эти переменные следует установить в текущем командном интерпретаторе, поэтому обычно вызов ssh-agent комбинируется с командой eval.

%$ eval `ssh-agent`
Agent pid 5088

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

Note-icon.gif

Для того чтобы использовать ssh-agent в системе X Window, нужно добавить строку
  eval `ssh-agent -s`; ssh-add < /dev/null
в скрипт, который выполняется перед запуском оконного менеджера. Таким файлом может быть, например, ~/.xsession.

Агент работает до тех пор, пока не будет явно завершен сигналом либо вызовом

%$ ssh-agent -k

В последнем случае должна быть доступна переменная SSH_AGENT_PID, которая хранит PID агента. Поэтому команда вызванная не из дочернего процесса, например, из другой консоли, действовать не будет.

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

Синтаксис команды ssh-add:

 %$ ssh-add options file

При вызове без параметров ssh-add сообщает агенту информацию о ключах из файлов identity, id_dsa и id_rsa. При этом программа спрашивает парольную фразу для каждого из ключей (или, если фразы совпадают, всего один раз). Ключ, для которого правильно была введена парольная фраза передается агенту.

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

Список известных агенту секретных ключей можно посмотреть той же командой ssh-add с ключом командной строки -l. Команда сообщит и отпечаток для каждого ключа.

%$ ssh-add -l
1024 ff:28:f1:2c:4c:f8:a0:80:10:f9:00:a1:c9:2d:55:73 user@host (RSA1)
1024 46:88:64:82:a7:f9:aa:ea:3b:21:9e:aa:75:be:35:80 /home/user/.ssh/id_rsa (RSA)
1024 18:dc:76:5d:e0:b0:e8:1a:97:48:45:00:e9:fc:b5:0f /home/user/.ssh/id_dsa (DSA)

Опции командной строки программы ssh-add

  • -l -- Показать список отпечатков известных агенту ключей
  • -L -- Показать информацию обо всех открытых ключах, соответствующих секретным ключам, известным ssh-add
  • -d -- Удалить ключ у агента
  • -D -- Удалить все ключи у агента
  • -x -- Заблокировать агента паролем
  • -X -- Разблокировать агента

[править] Дополнительная информация

[править] Материалы по SSH на xgu.ru