Управление ключами SSH с помощью агента
Вводить парольную фразу каждый раз, когда используется ssh
не очень удобно. Было бы намного проще ввести ее один раз при входе в систему, сохранить где-нибудь, а затем все время пользоваться. Такую задачу позволяет решить специальная программа — ssh-agent
.
Программа ssh-agent
хранит секретные ключи и, когда нужно, пользуется ими. Программа (например, ssh
), когда ей понадобится воспользоваться секретным ключом, не делает этого сама, а обращается к ssh
-агенту, который в свою очередь уже сам пользуется известными только ему данными о секретных ключах. Таким образом, секретные ключи не разглашаются никому, даже программам, принадлежащим самому пользователю.
Программу 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
Во втором случае агент экспортирует значения переменных в среду окружения и порождает дочерний процесс, выполняя в нем команду. Достигается аналогичный результат, только при этом порождается дополнительный процесс.
Агент работает до тех пор, пока не будет явно завершен сигналом либо вызовом
$ ssh-agent -k
В последнем случае должна быть доступна переменная SSH_AGENT_PID
, которая хранит PID
агента. Поэтому команда вызванная не из дочернего процесса, например, из другой консоли, действовать не будет.
После того как агент запущен и выполняется, необходимо сообщить ему информацию о ключах. Программа ssh-add
добавляет и удаляет ключи у агента. Кроме того она позволяет блокировать агент, а также устанавливать время действия ключей.
Синтаксис команды ssh-add
:
ssh-add опции файл
При вызове без параметров 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
— Разблокировать агента