Какова цель ssh-agent?

Я прочитал официальное определение:

ssh-agent – это программа для хранения закрытых ключей, используемых для аутентификации с открытым ключом (RSA, DSA, ECDSA). Идея заключается в том, что ssh-agent запускается в начале сеанса X-сеанса или сеанса входа в систему, а все остальные окна или программы запускаются как клиенты в программу ssh-agent. Благодаря использованию переменных среды агент может быть расположен и автоматически использоваться для аутентификации при входе на другие машины с помощью ssh (1).

«..а программа для хранения секретных ключей ..» – IMHO – ключи ssh генерируются пользователем с помощью команды ssh-keygen и просто и просто хранятся в ~ / .ssh – зачем мне нужен демон для хранения этих ключей? Как именно он их держит в любом случае – разве они просто не хранятся в .ssh?

«запускаются как клиенты в программу ssh-agent» – я этого не понимаю. Где это нужно? Обычно я использую ssh:

ssh -i ~/.ssh/private_key_name username@hostname 

Что именно делает ручное средство «клиентами» – какие клиенты? Разве вы не запускаете команду ssh из терминала для подключения – какие другие клиенты есть и почему они не могут просто использовать путь к этому приватному файлу ssh, точно так же, как команда ssh?

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

В качестве меры безопасности большинство людей разумно защищают свои секретные ключи с помощью пропущенной фразы, поэтому для любой попытки аутентификации вам потребуется ввести эту кодовую фразу. Это может быть нежелательным, поэтому агент ssh кэширует их ключ для вас, и вам нужно только вводить пароль один раз, когда агент хочет его расшифровать (и часто даже это невозможно, поскольку агент ssh может быть интегрирован с pam, что многие distros do).

Агент SSH никогда не передает эти ключи клиентским программам, а просто представляет сокет, по которому клиенты могут отправлять его данные и по которым он отвечает подписанными данными. Преимуществом этого является то, что вы можете использовать свой секретный ключ даже в тех программах, которые вы не полностью доверяете.

Еще одно преимущество агента SSH заключается в том, что его можно перенаправить через SSH. Поэтому, когда вы ssh размещаете A, при пересылке вашего агента вы можете затем ssh от A до другого хоста B без необходимости присутствия вашего ключа (даже не в зашифрованном виде) на хосте A.

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

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

Еще одно преимущество заключается в том, что, согласно man странице, агент никогда не отправляет закрытый ключ по каналу запроса; поэтому, если вы прыгаете между разными ячейками, ваши личные ключи защищены.

1 Вы можете установить life ключей в агенте.

Вероятно, статья в Википедии имеет лучшее описание:

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

Снова дословно из статьи в Википедии:

… ssh-agent создает сокет, а затем проверяет соединения с ssh. Каждый, кто может подключиться к этому сокету, также имеет доступ к ssh-agent. Разрешения устанавливаются как в обычной системе Linux, так и в Unix. Когда агент запускается, он создает новый каталог в / tmp с ограничительными разрешениями. Сокет находится в папке.

Обычно он помещается в системные или пользовательские файлы rc, такие как $HOME/.bashrc или $HOME/.profile (для оболочек bash), так что переменные среды ssh-agent устанавливаются в вашу среду полностью.

В моей системе Fedora 14 она запускается довольно рано как часть подсистемы X11. В этом файле /etc/X11/xinit/xinitrc-common :

 # Prefix launch of session with ssh-agent if available and not already running. SSH_AGENT= if [ -z "$SSH_AGENT_PID" ] && [ -x /usr/bin/ssh-agent ]; then if [ "x$TMPDIR" != "x" ]; then SSH_AGENT="/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR" else SSH_AGENT="/usr/bin/ssh-agent" fi fi 

Переменная $SSH_AGENT затем используется в других сценариях запуска X11, таких как здесь, /etc/X11/xinit/Xclients :

 exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh" 

Включая его здесь, следующие переменные окружения устанавливаются как часть родительской оболочки, поэтому все разветвленные дети также должны иметь их, например:

 SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK; SSH_AGENT_PID=18959; export SSH_AGENT_PID; 

Для этого есть немного сложнее, но в двух словах это в основном то, что происходит с ssh-agent .

Например, в GNOME ssh-agent фактически запускается для каждого пользователя в качестве запускающего приложения:

ss загрузочных приложений

TL; DR

В нижней строке ssh-agent существует так, что когда ваши ключи ssh требуются, вам нужно только разблокировать их один раз с помощью своей кодовой фразы (при условии, что они есть), и с тех пор они доступны в их расшифрованной форме в памяти (ОЗУ) ,

«запускаются как клиенты для программы ssh-agent» относится к идее, что ssh-agent запускается во время (локальной) инициализации сеанса входа, чтобы все программы получали переменные среды $SSH_AGENT_PID и $SSH_AUTH_SOCK которые необходимы для соединения агента.

Еще одно преимущество, заключающееся в том, что обработка секретного ключа из ssh заключается в том, что ssh-agent может быть заменен gpg-agent. Таким образом, вы можете использовать ключи OpenPGP (с возможностью аутентификации) для SSH. Это хорошее решение для ключей OpenPGP на смарт-карте.