Ssh key agent linux что это

Обновлено: 03.07.2024

В этом посте посмотрим примеры работы с ssh-agent и то, как можно хранить и управлять запароленными RSA-ключами без таких бекендов.

ssh-agent

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

Запуск агента

SSH_AUTH_SOCK=/tmp/ssh-dMDE5mED77tM/agent.436347; export SSH_AUTH_SOCK;

Для работы клиентов важны переменные, которые задаются агентом:

  • SSH_AGENT_PID : с PID процесса с ssh-agent , которая будет использоваться при, например, ssh-agent -k для остановки агента
  • SSH_AUTH_SOCK : указывает на путь к unix-сокету, который будут использовать другие процессы для коммуникации с ssh-agent

Вариантов запуска много, рассмотрим их в конце, в Запуск ssh-agent и несколько консолей.

Примеры

Рассмотрим базовые примеры использования ssh-agent .

Создание ключа
ssh-keygen -t rsa -b 2048 -f /home/setevoy/.ssh/test-key -C "Testing key" -P pass Your identification has been saved in /home/setevoy/.ssh/test-key. Your public key has been saved in /home/setevoy/.ssh/test-key.pub. SHA256:pTyrGtk1hnNHB6b8ilp5jRe1+K4KrLHg50yUGilApLY Testing key

  • -t : тип RSA
  • -b : длина ключа в битах (по-умолчанию 3072 для RSA)
  • -f : путь к файлу ключа (по-умолчанию будет

Проверка пароля
Смена пароля

Что бы изменить пароль, заня старый:

Your identification has been saved with the new passphrase.

Скопировать ключ можно вручную, получив его публичную часть:

И скопировав содержимое в файл

/ .ssh/authorized_keys на удалённом хосте.

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/setevoy/.ssh/test-key.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys Now try logging into the machine, with: "ssh 'setevoy@rtfm.co.ua'" and check to make sure that only the key(s) you wanted were added.

И пробуем подключиться, используя этот ключ:

ssh-add

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

Проверим, что агент запущен:

setevoy 1322 0.0 0.0 5796 456 ? Ss Nov30 0:00 ssh-agent -s setevoy 1324 0.0 0.0 5796 2160 ? Ss Nov30 0:00 ssh-agent -s

Could not open a connection to your authentication agent

Could not open a connection to your authentication agent.

Первым делом проверяем SSH_AGENT_PID (или $SSH_AUTH_SOCK , т.к. запросы от ssh-add выполняются через сокет, заданный в этой переменной):

ssh-agent был запущен в другом терминале (об этом тоже поговорим ниже), поэтому перезапустим его.

И запускаем заново:

Проверяем ещё раз:

Добавление ключа

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

Проверяем загруженные в агент ключи, используя -l :

2048 SHA256:pTyrGtk1hnNHB6b8ilp5jRe1+K4KrLHg50yUGilApLY Testing key (RSA)

Удаление ключа

Используем -d для удаления одного ключа:

Или -D для удаления всех ключей:

Автоматическое добавление в ssh-agent

Выполняем подключение, вводим пароль ключа:

Отключаемся, проверяем ключи в агенте:

2048 SHA256:pTyrGtk1hnNHB6b8ilp5jRe1+K4KrLHg50yUGilApLY Testing key (RSA)

Запуск ssh-agent и несколько консолей

Could not open a connection to your authentication agent.

Но тогда для каждой сессии bash будет запускаться новый агент.

Ещё одним вариантом запуска через .bashrc может быть такой:

Тут выполняется (см. коды ответа ssh-agent в документации):

  1. пытается выполнить ssh-add -l , перенаправляет весь вывод в /dev/null
  2. проверяет код выхода предыдущей комнады
    1. если код == 2 (ошибка подключения к агенту)
      1. проверяет доступен ли на чтение

      systemd

      Добавляем каталог, если не создан:

      Далее, Wiki говорит про файл

      /.pam_environment , но у меня Openbox и я переменные обычно задаю в .config/openbox/autostart :

      Останавливаем запущенные инстансы агента:

      Сейчас задаём переменную $SSH_AUTH_SOCK вручную:

      И запускам агент через systemctl --user :

      Loaded: loaded (/home/setevoy/.config/systemd/user/ssh-agent.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2019-12-01 09:15:18 EET; 2s ago CGroup: /user.slice/user-1000.slice/user@1000.service/ssh-agent.service └─497687 /usr/bin/ssh-agent -D -a /run/user/1000/ssh-agent.socket Dec 01 09:15:18 setevoy-arch-pc systemd[670]: Started SSH key agent. Dec 01 09:15:19 setevoy-arch-pc ssh-agent[497687]: SSH_AUTH_SOCK=/run/user/1000/ssh-agent.socket; export SSH_AUTH_SOCK; Dec 01 09:15:19 setevoy-arch-pc ssh-agent[497687]: echo Agent pid 497687;

      И пробуем ssh-add :

      Можно добавить в автозапуск:

      Created symlink /home/setevoy/.config/systemd/user/default.target.wants/ssh-agent.service → /home/setevoy/.config/systemd/user/ssh-agent.service.

      SSH или Secure Shell - это зашифрованный протокол, который часто используется для взаимодействия и удаленного управления серверами. Если вы захотите что-либо сделать на удаленном сервере, скорее всего, вам придется воспользоваться SSH и работать через терминал.

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

      Как работают ключи SSH?

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

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


      Как создать ключи SSH?

      Сначала необходимо создать ключи ssh для аутентификации на локальном сервере. Для этого существует специальная утилита ssh-keygen, которая входит в набор утилит OpenSSH. По умолчанию она создает пару 2048 битных RSA ключей, которая подойдет не только для SSH, но и для большинства других ситуаций.

      И так, генерация ключей ssh выполняется командой:


      Утилита предложит вам выбрать расположение ключей. По умолчанию ключи располагаются в папке

      /.ssh/. Лучше ничего не менять, чтобы все работало по умолчанию и ключи автоматически подхватывались. Секретный ключ будет называться id_rsa, а публичный id_rsa.pub.

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

      • Пароль никогда не попадет в сеть, он используется только на локальной машине для расшифровки ключа. Это значит что перебор по паролю больше невозможен.
      • Секретный ключ хранится в закрытом каталоге и у клиента ssh нет к нему доступа пока вы не введете пароль;
      • Если злоумышленник хочет взломать аутентификацию по ключу SSH, ему понадобится доступ к вашей системе. И даже тогда ключевая фраза может стать серьезной помехой на его пути.

      Но все же, это необязательное дополнение и если не хотите, то вы можете просто нажать Enter. Тогда доступ по ключу ssh будет выполняться автоматически и вам не нужно будет что-либо вводить.

      Теперь у вас есть открытый и закрытый ключи SSH и вы можете использовать их для проверки подлинности. Дальше нам осталось разместить открытый ключ на удаленном сервере.

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

      Когда генерация ключей завершена, нам осталось только загрузить ключ на сервер. Для загрузки ключа можно использовать несколько способов. В некоторых случаях вы можете указать ключ в панели управления сервером, например, сPanel или любой другой. Но мы такой способ рассматривать не будем. Мы рассмотрим ручные способы.

      Самый простой способ скопировать ключ на удаленный сервер - это использовать утилиту ssh-copy-id. Она тоже входит в пакет программ OpenSSH. Но для работы этого метода вам нужно иметь пароль доступа к серверу по SSH. Синтаксис команды:

      При первом подключении к серверу система может его не распознать, поэтому вам нужно ввести yes. Затем введите ваш пароль пользователя на удаленном сервере. Утилита подключится к удаленному серверу, а затем использует содержимое ключа id.rsa.pub для загрузки его на сервер в файл

      /.ssh/authorized_keys. Дальше вы можете выполнять аутентификацию с помощью этого ключа.

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

      /.ssh, а затем поместим наш ключ в файл authorized_keys с помощью символа >>, это позволит не перезаписывать существующие ключи:

      /.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p

      Здесь вам тоже нужно набрать yes, если вы подключаетесь к новому серверу, а затем ввести пароль. Теперь вы можете использовать созданный ключ для аутентификации на сервере:

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

      Отключение проверки пароля

      sudo vi /etc/ssh/sshd_config

      Теперь сохраните файл и перезапустите службу ssh:

      sudo service ssh restart

      Дальше будет возможно только подключение по ключу ssh, пароль не будет приниматься.

      Выводы

      В этой статье мы рассмотрели как выполняется авторизация по ключу ssh, настройка ключей ssh и добавить ssh ключ. Теперь вы можете войти на сервер без ввода пароля. Если у вас остались вопросы, спрашивайте в комментариях!


      На этой странице описывается что такое 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 (в которой хранится идентификатор процесс агента) сообщает информацию о том, как с ним можно связаться.

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

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

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

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

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

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

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

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

      %$ ssh-add options file

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

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

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


      Для удаленного управления системами Linux необходимо настроить доступ по SSH (secure shell). SSH – это криптографический протокол для управления и взаимодействия с серверами. Существует несколько различных способов подключения к SSH-серверу. В этой статье мы рассмотрим настройку аутентификации на основе ключей SSH.

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

      Статья основана на англоязычной статье. В тексте использованы изображения из оригинальной статьи.

      Создание ключа

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

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

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

      Генерация с помощью PuTTY

      Для создания пары ключей пользователи Windows могут использовать утилиту PuTTYgen. Этот инструмент является частью полной установки PuTTY, также его можно скачать отдельно.


      Создание пары ключей PuTTYgen

      Генерация с помощью ssh-keygen

      Пользователи, которые используют Linux (или другую Unix-систему), могут генерировать ключи с помощью команды ssh-keygen , которая входит в стандартный набор инструментов OpenSSH.

      Для большей безопасности и скорости работы рекомендуется использовать более новый формат ключей Ed25519. Открытый ключ Ed25519 компактен. Он содержит только 68 символов по сравнению с RSA 3072, который имеет 544 символа. Генерирование ключа также почти так же быстро, как и процесс подписания. Также, при использовании Ed25519, возможно быстро выполнить проверку подписи. Для генерации ключа Ed25519 используйте следующую команду:

      Если удаленный хост не поддерживает такой тип ключей, сгенерируйте классический ключ в формате RSA:

      Ответ будет выглядеть подобным образом:


      Команда ssh-keygen создает 4096-битный ключ RSA

      На сегодняшний день RSA является наиболее широко используемым алгоритмом открытого ключа для SSH. Но по сравнению с Ed25519, он медленнее и даже считается небезопасным, если он генерируется с ключом длиной менее 2048 бит.

      Копирование ключа на удаленный сервер

      /.ssh/authorized_keys. Теперь попробуйте войти в систему и посмотрите, работает ли аутентификация по ключу.

      Использование агента

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

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

      Использование агента PuTTY (pageant)

      Если подключение без пароля на срабатывает, на это может быть ряд причин:

      • ключ не принят сервером (см. журнал активности PuTTY);
      • файл authorized_keys или каталог

      /.ssh , хранящийся на сервере имеет неверно настроенные права доступа ( chmod -R u+rwX,go-rwx

      Использование утилиты ssh-agent из пакета OpenSSH

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

      Для начала работы запустите ssh-agent:

      После этого, вы с помощью ssh-add можете единоразово добавить в кэш агента ключ, защищенный паролем.

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

      Использование Systemd для запуска ssh-agent

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

      Добавьте приведенную ниже строку в shell-файл .profile (например, .bash_profile ):

      Теперь можно активировать и запустить сервис, который будет обслуживать агента SSH:

      Настройки на стороне сервера SSH

      Чтобы использовать только аутентификацию по ключам, аутентификацию с использованием паролей необходимо отключить. Перед тем, как это сделать, убедитесь, что вход по ключам работает корректно.

      Укажите значения параметров в файле /etc/ssh/sshd_config, как показано ниже:

      Читайте также: