Как я могу навсегда сохранить защищенный паролем ключ SSH?

9

Я использую Awesome Window Manager

Как я могу постоянно добавлять закрытые ключи с паролем?

Вдохновленный ответом здесь я добавил закрытые ключи в ~ / .ssh / config

Содержимое ~ / .ssh / config:

IdentityFile 'private key full path'

Разрешения ~ / .ssh / config: 0700

Но это не работает для меня.

Если я добавляю ключ вручную в каждом сеансе, он работает, но я ищу более элегантный способ (не в .bashrc)

РЕДАКТИРОВАТЬ :

  • Использование Gnome классической (без эффектов) версии.

После добавления ключа SSH ssh-copy-ifк удаленному хосту, я получаю следующее приглашение в терминале (GNOME Terminal 3.0.1) при входе в систему:

ssh -i .ssh/Password-Protected-Key user@host
Enter passphrase for key '.ssh/Password-Protected-Key':
  • Использование Awesome оконного менеджера v3.4.10. У меня уже было, gnome-keyring-dameonпоэтому я убил другой pid и запустил gnome-keyring-daemon --start | grep SOCK(я также добавил его в .profile) вывод (grep):

SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh

Я выполнил те же самые шаги, и аналогично у меня нет диалогового окна ssh-add с графическим интерфейсом.

РЕДАКТИРОВАТЬ 2 :

Я создал новый ключ, защищенный паролем, из виртуальной машины Ubuntu 11.10 на Unity, и до сих пор не могу получить запрос пароля.

РЕДАКТИРОВАТЬ 3 : Кажется, что это не может работать в Awesome оконном менеджере :( и, возможно, другие ..

pl1nk
источник
1
Какой смысл добавлять защищенный паролем ключ SSH? Это побеждает цель ...
MarkovCh1
3
@Syzygy Хорошо, вы всегда вводите пароли от различных сервисов и приложений, или вы используете брелок для разблокировки пароля с помощью пароля для входа?
pl1nk
Есть еще мысли / вопросы, pl1nk? Bounty льготный период истекает очень скоро :-)
иш
@izx Я проверил все, что вы упомянули, и все, как и ожидалось. Как я уже упоминал в своем обновлении, я также использовал Gnome. Должен ли я сообщить об ошибке?
pl1nk
Вы можете найти некоторые подсказки здесь . Похоже, порядок, в котором все начинается, важен, и для gnome-keyring-daemon также важно попасть в dbus.
Джон С. Грубер

Ответы:

2

Если вы используете Unity или менеджер сеансов, который запускает gnome-keyring-daemon, вы можете просто использовать Seahorse (пароли и ключи), чтобы установить ключ, определить, для чего он нужен, установить фразу-пароль и распространить ее открытый ключ для компьютер, который вы собираетесь использовать с SSH. Нет необходимости в терминальных командах.

Вы создаете пароль:

  1. выбрав File-> New и выберите Secure Shell Key. Нажмите Продолжить.

  2. Введите описательное имя и выберите Create and set up.

  3. Вам будет предложено ввести ключевую фразу дважды (во второй раз, чтобы убедиться, что вы не ввели ее неправильно в первый раз).

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

Теперь на My Personal Keysвкладке будет отображаться ключ.

Предполагая, что gnome-keyring-daemon был запущен правильно, когда вы вошли в Lightdm, и снова вашим менеджером сеансов, когда вы впервые используете ключ с ssh, вам будет предложено ввести ключевую фразу. В этом диалоговом окне вы можете указать Detailsключевую фразу, выбрать элемент управления и попросить, чтобы брелок был разблокирован, когда вы вошли в систему - автоматически предоставив этот ключ. НажмитеOK

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

После того, как это будет выполнено, на первой вкладке Seahorse Passwordsбудет отображаться «Unlock password entry» для имени ключа. Нажмите на треугольник перед « Пароли: Логин», чтобы увидеть его.

Джон С. Грубер
источник
Так что эта функциональность не работает с Awesome WM. Я хотел бы продолжить использовать Awesome, поэтому я буду продолжать использовать мой обходной путь.
PL1NK
19

Создание защищенного паролем ключа SSH в сеансах и перезагрузках

Это, вероятно, то, что вы хотите: ввод ключевой фразы-пароля один раз делает ее доступной навсегда, когда вы входите в систему. Это будет работать для большинства пользователей, которые используют рабочие столы Unity или Gnome.

  • Когда вы подключаетесь после добавления открытого ключа к удаленному серверу, вы получаете диалог ssh-add с графическим интерфейсом:

    введите описание изображения здесь

  • Разверните «Детали», нажав на треугольник, и вы получите ниже. По умолчанию используется «блокировка ключей при выходе из системы», что требует ввода пароля один раз за сеанс:

    введите описание изображения здесь

  • Измените его на Автоматически разблокировать ... всякий раз, когда я вошел в систему , что означает, что он будет работать всякий раз, когда вы входите в сеанс - он "контролируется" вашим паролем пользователя. Это будет сохраняться через перезагрузки.

    введите описание изображения здесь

  • Введите ключевую фразу один раз и все - ключ аутентифицируется при первом успешном входе в среду рабочего стола.


Если вы используете AwesomeWM

Протестировано с новой установкой AwesomeWM в новом ИД пользователя

  • По умолчанию AwesomeWM использует ssh-agent:

    $ экспорт | grep SSH
    объявлять -x SSH_AGENT_PID = "5479"
    объявить -x SSH_AUTH_SOCK = "/ tmp / ssh-fWCKNnPq5440 / agent.5440"
    
  • Чтобы вышеперечисленные шаги работали, вы должны использовать gnome-keyring-daemonв качестве демона аутентификации SSH, а не ssh-agent. Когда вы входите с помощью lightdm, запускается PAM gnome-keyring-daemon, который пытается разблокировать ключ входа с помощью вашего пароля разблокировки, но вы должны добавить в свою конфигурацию, чтобы он продолжал работать и использовать его.

  • Добавьте следующее в конец вашего ~/.xprofile:

      #! / Bin / Баш
      eval $ (gnome-keyring-daemon --start)
      экспорт SSH_AUTH_SOCK
      экспортировать GNOME_KEYRING_PID
      экспортировать GNOME_KEYRING_CONTROL
    

Команды в ~/.xprofileфайле будут выполнены xsession перед запуском удивительного оконного менеджера и свяжут его с gnome-keyring-daemon --loginпроцессом, запущенным PAM через указанные выше переменные окружения.

  • Выйдите из системы на lightdm и снова войдите в систему, и теперь, когда вы это сделаете ssh user@host, вы должны получить вышеупомянутые всплывающие окна - используйте их для декодирования ваших закрытых ключей в ~ / .ssh / и сохраните ваши личные ключи в связке ключей входа gnome-keyring.

Общее решение для любого оконного менеджера / рабочего стола

  • это использовать gnome-keyring-daemonвместо ssh-agent. Для этого вам нужно работать gnome-keyring-daemon и иметь его инициализации и либо сделать это после того, как ssh-agentзапускается или не запускается ssh-agentвообще.

  • ssh(фактически ssh-add) решает, какой агент аутентификации вызывать, основываясь на значении SSH_AUTH_SOCKпеременной среды, которую можно проверить, набравexport | grep SOCK

  • это имеет форму SSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130для ssh-agent (НЕ то, что вы хотите, чтобы иметь возможность сохранить ваш ключ)

  • но в форме SSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"для gnome-keyring-daemon (который вы хотите)

  • поэтому проверьте значение и проверьте ps aux | grep keyring, запущен ли gnome-keyring-daemon , и, если это так, инициализируйте его с результатамиgnome-keyring-daemon --start

  • Затем вы можете проверить связанные сохраненные идентификационные данные в консоли, набрав ssh-add -l- если он показывает «нет агента», то вы допустили ошибку при настройке gnome-keyring-daemon.

иш
источник
Ну, я не видел этого! Какую команду я могу использовать или, что еще лучше, какую команду вызывает этот диалог?
pl1nk
@izx при использовании этого необходимо использовать ssh-add?
Джон С. Грубер
@JohnSGruber Нет, пока есть закрытые ключи ~/.ssh, использовать их не нужно ssh-add- диалоговое окно будет появляться при первом использовании. Обратите внимание, что это работает только в Unity / Gnome - в чате я обнаружил, что OP использует AwesomeWM , где это не работает!
иш
1
@ pl1nk: пожалуйста, смотрите обновленное решение для AwesomeWM в конце ответа.
иш
@izx - Спасибо за вашу общую поддержку, проверьте мой обновленный вопрос.
pl1nk
2

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

  • Создайте пару секретный / открытый ключ с ssh-keygen -t dsa
  • Скопируйте открытый ключ на удаленный компьютер, обычно это ~ / .ssh / authorized_keys (используйте ssh-copy-idдля этого)
  • Запустите ssh-addперед входом в удаленную систему, запросит пароль и сохранит его.
  • Вход в удаленную систему, пароль не требуется

ssh-agent хорошо описан в .net, например, здесь:

Еще одним преимуществом ssh-agent является то, что если вы ssh -A user@domain.nameвходите в удаленную систему с помощью этой программы, вы можете в дальнейшем использовать ssh с компьютера domain.name на третий компьютер, содержащий ваш открытый ключ, без всякого копирования вашего личного ключа на компьютер domain.name (и никогда видит ваш закрытый ключ, только одноразовый вызов / ответ).

Floyd
источник
Как я могу это сделать? Это не ясно из инструкций, которые вы отправили. Кроме того, это связано с Ubuntu?
pl1nk
Я отредактировал свой пост с подробной инструкцией
Флойд
Ваше решение хранит пароль для каждого сеанса, кроме того, в моем случае кажется, что был конфликт с gnome-keyring, как вы можете видеть в моем ответе.
PL1NK
@ pl1nk: вам нужен пароль для хранения между сеансами, т. е. только один раз для каждой загрузки?
Иш
да, вы должны предоставить пароль один раз за сеанс. В этом вся идея ключей ssh, защищенных паролем, чтобы обеспечить еще один уровень безопасности помимо возможности доступа к файлу закрытого ключа после входа в систему.
Флойд
-1

ты можешь использовать

ssh-add 'filename or fullpath'

Вас попросят ввести ключевую фразу, если она есть у ключа

тогда вы можете подключиться без пароля

eyadof
источник
1
Как я уже упоминал в своем вопросе, я ищу более элегантный способ.
pl1nk
-2

Если вы хотите работать с закрытыми ключами, сделайте:

ssh-keygen -t rsa -N ''

Затем:

скопировать .ssh/id_rsa.pubна место назначения машины .ssh/authorized_keysчерез scp

scp .ssh/id_rsa.pub user@remote_machine:~/.ssh/authorized_keys

Все сделано.

Подключиться к удаленному компьютеру без пароля:

ssh user@remote_machine

И у нас нет запроса пароля.

Октавио Филипе Гонсалвес
источник
Это будет постоянно спрашивать меня о пароле ключа каждый раз.
pl1nk
1
Вероятно потому, что когда вы запускаете ssh-keygen -t rsa -N '', вы вводите пароль. Поэтому, когда вы запускаете указанную выше команду, не вводите пароль, только нажмите клавишу «ВВОД».
Октавио Филипе Гонсалвеш
Ну, я хотел бы иметь ключи с паролем. Я обновил свой вопрос
pl1nk
1
Хорошо, я не понимаю, почему вы хотите сделать это с паролем. Обычно эта концепция используется только для подключения к удаленным компьютерам, которые могут распознавать клиентский компьютер без аутентификации. Итак, если вы не хотите этого сценария, вам нужно только выполнить обычное ssh-соединение. правильно?
Октавио Филипе Гонсалвеш
1
Говорить людям, что они должны копировать свой открытый ключ поверх авторизованных ключей на удаленном компьютере, - это немного грубая сила ... Гораздо лучше использовать команду ssh-copy-id user @ remotemachine, которая при входе с паролем будет в первый раз, а затем APPEND не перезаписывает ключ.
Флойд