Сохранение паролей от ssh ключей между сессиями

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

kodx
Сообщения: 7
ОС: Linux

Сохранение паролей от ssh ключей между сессиями

Сообщение kodx »

Есть проблема, которую хотелось бы решить.

Есть много ssh ключей(пока их 10 штук), у каждого ключа свой пароль. Недавно перешел на Debian Squeeze с Ubuntu и встала такая проблема.
В Ubuntu я использовал Gnome и там была связка программ gnome-keyring-daemon + seahorse-agent, которые отвечали за хранение паролей. Насколько я смог разобраться, gnome-keyring-daemon в качестве главного пароля использовал пароль для входа пользователя в систему.
Теперь я попробовал воспроизвести тоже самое, но на Debian Squeeze и без gnome-session, а на простом openbox, поправил некоторые баги этого демона (он не экспортирует переменные окружения при запуске и остальное), но мне так и не удалось добиться того, чтобы этот демон один раз спросил пароль от ключа и запомнил его навсегда, т.е. после перезагрузки компьютера - он снова спрашивает. Я был бы рад переводить компьютер в режим suspend, но в Squeeze эта функциональность просто не работает (они там что-то сломали, даже пакет uswsusp убрали из репа).

Что хотелось бы:
- В идеале: консольная тулза, которая умела бы запоминать пароли для ключей и хранить их между перезагрузками, потому что вводить 10 разных паролей по 20 символов длиной каждый день уж очень утомительно. Т.е. чтобы она один раз спросила эти пароли и запомнила навсегда, и хранили бы у себя какой-нибудь зашифрованный кеш паролей и ключей, который бы предоставляла ssh. (я знаю про существование программ keychain( http://www.gentoo.org/proj/en/keychain/ ) ну и сам ssh-agent, они не умеют сохранять пароли между перезагрузками)
- Вполне сойдет: граф. тулза или демон какой, который бы делал то, что мне надо.

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

Может быть все уже давно решили этот вопрос простым способом, а я не в курсе. Спасибо за ответы.
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: Сохранение паролей от ssh ключей между сессиями

Сообщение Luinnar »

На сколько я понял, вам нужен безпарольный доступ по ssh на кучу разных машин. Это можно сделать через ssh-keygen. Нужно сгенерировать два ключа: секретный (private) и публичный (public). Делается это так:

Код: Выделить всё

# ssh-keygen -t rsa -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
<your-key> user@host


Далее вам нужно публичный ключ выложить на те удалённые машины, на которые вы хотите получать безпарольный ssh доступ:

Код: Выделить всё

cat ~/.ssh/id_rsa.pub | ssh user@remotehost 'cat >> ~/.ssh/authorized_keys'


После этого машины, на которые вы выложили свой публичный ключ, будут принимать вас по ssh без пароля.
Спасибо сказали:
kodx
Сообщения: 7
ОС: Linux

Re: Сохранение паролей от ssh ключей между сессиями

Сообщение kodx »

Спасибо за ликбез, про все это я уже в курсе.
Хотелось бы заметить, что в приведенной подсказке по генерации паролей есть несколько недочетов, а конкретно:
  • rsa не рекомендуется для шифрования, хотя и является более универсальным, но его стойкость ниже чем у dsa. Поэтому лучше выбирать dsa.
  • генерировать ключи без пароля это очень плохо, т.к. имея лишь публичный ключ, можно получить приватный.


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

Скажу так, после нескольких дней исследования этого вопроса пришел к решению. Далее попробую его описать.

Дистрибутив Debian GNU/Linux Squeeze (на данный момент testing).

Для работы нам понадобятся такие пакеты
gdm libpam-gnome-keyring gnome-keyring openssh-client
данный набор не универсален, я мог что-то пропустить, не бойтесь устанавливать recommended и suggested пакеты, лишними они не будут.

Согласно текущей документации gnome-keyring был овязан от гнома и теперь может использоваться как самостоятельное приложение.

Debian Squeeze по умолчанию пишет в файл /etc/pam.d/gdm такие записи:

Код: Выделить всё

@include common-auth
auth    optional        pam_gnome_keyring.so
@include common-session
session optional        pam_gnome_keyring.so auto_start


Если ваш дистрибутив этого не сделал, можете добавить сами.
Суть этих модулей в том, что при запуске gnome-keyring-daemon, ему в качестве аргумента передается ваш пароль от входа, он же используется как основной пароль для разблокировки брелока.

После того как все было установлено, при следующем входе в ваше графическое окружение через gdm, автоматически будет запущен gnome-keyring-daemon. Но есть один нюанс - он не будет инициализирован. Для его инициализации необходимо добавить в ваш автозапуск (смотря какое окружение вы используете, смотрите сами, я обычно это делаю через ~/.xsession)

Код: Выделить всё

eval $(gnome-keyring-daemon -s)


Данная строчка проинициализирует gnome-keyring-daemon и экспортирует переменные окружения, которые будут указать на этот демон, в случае, когда необходимо будет запросить пароль от брелока или разблокировать ключ.

Допустим у вас уже есть сгенерированный ключ, можно воспользоваться инструкцией от Luinnar. У нас есть два ключа, пусть это будут my_key и my_key.pub. Первый ключ приватный, а второй публичный. Мы копируем их в каталог ~/.ssh, после чего набираем команду
gnome-keyring import ~/.ssh/my_key
должно появится окно для ввода пароля от ключа, и галочка "запомнить пароль"(или что-то подобное). После этого можно входить на удаленные компьютеры без ввода пароля для каждого из ключей.
Для удобного управления ключами и вашими pgp подписями можно установить программу seahorse.

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

Код: Выделить всё

eval $(gnome-keyring-daemon -s)

в автозагрузку.

Все это нужно для тех, кто не использует ни GNOME ни KDE. В первом этот менеджер стартует из gnome-session, а у второго есть свой KWallet.

Надеюсь результаты моего небольшого исследования будут кому-то еще полезны. Тема повисит немного открытой, потом я её закрою, если у кого-то вдруг не найдется консольного решения.
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: Сохранение паролей от ssh ключей между сессиями

Сообщение BIgAndy »

kodx писал(а):
29.03.2010 21:53
Надеюсь результаты моего небольшого исследования будут кому-то еще полезны. Тема повисит немного открытой, потом я её закрою, если у кого-то вдруг не найдется консольного решения.

man ssh-agent
man ssh-add
man ssh-cluster
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5458
ОС: Gentoo

Re: Сохранение паролей от ssh ключей между сессиями

Сообщение /dev/random »

kodx писал(а):
29.03.2010 21:53
*rsa не рекомендуется для шифрования, хотя и является более универсальным, но его стойкость ниже чем у dsa. Поэтому лучше выбирать dsa.

Вы, наверное, хотели сказать "для подписей", а не "для шифровния". dsa не используется для шифрования.

kodx писал(а):
29.03.2010 21:53
*генерировать ключи без пароля это очень плохо, т.к. имея лишь публичный ключ, можно получить приватный.

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

kodx писал(а):
29.03.2010 21:53
Тема повисит немного открытой, потом я её закрою

Закрывать темы могут только модераторы.
Спасибо сказали:
kodx
Сообщения: 7
ОС: Linux

Re: Сохранение паролей от ssh ключей между сессиями

Сообщение kodx »

ssh-cluster это вообще тут к чему?

Я уже писал, что это не выход. Прочел вдоль и поперек эти маны.

Попробую пояснить в который раз.
Мы загрузили компьютер. Запускаем ssh-agent командой
eval ($ssh-agent)
Потом добавляем приватный ключ командой
ssh-add ~/.ssh/my_key
программа запрашивает пароль от ключа, мы его вводим. Работаем в этой сессии. Перезагружаем компьютер. Повторяем все действия опять.
Я же хочу сделать так, чтобы он один раз спросил пароль от ключа, и запомнил его навсегда, чтобы не спрашивал меня при каждой перезагрузке.
Может я чего конкретно не понимаю в работе этих программ? Или упустил какой параметр? Если человек посылает читать маны, не комментируя совершенно никак свои заявления, это скорее признак того, что вы сами не понимаете о чем речь.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5458
ОС: Gentoo

Re: Сохранение паролей от ssh ключей между сессиями

Сообщение /dev/random »

Передать команде ssh-add известный скрипту пароль можно через expect. Пароли от всех ключей можно хранить в зашифрованном через openssl файле. Скрипт может спросить у пользователя "глобальный" пароль, расшифровать с его помощью этот файл и вызвать нужное количество раз ssh-add с прочитанными из него паролями.
Спасибо сказали:
kodx
Сообщения: 7
ОС: Linux

Re: Сохранение паролей от ssh ключей между сессиями

Сообщение kodx »

Вы, наверное, хотели сказать "для подписей", а не "для шифровния". dsa не используется для шифрования.

Читал что rsa можно использовать и для шифрования и для подписей, dsa же только для подписей.

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

Все-же с паролем выходит защищеннее.


Закрывать темы могут только модераторы.


Я подразумевал что повешу тег РЕШЕНО, и тогда шансов, что сюда кто-то еще заглянет, совсем не останется.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Сохранение паролей от ssh ключей между сессиями

Сообщение drBatty »

kodx писал(а):
29.03.2010 21:53
* генерировать ключи без пароля это очень плохо, т.к. имея лишь публичный ключ, можно получить приватный.

кстати, как?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: Сохранение паролей от ssh ключей между сессиями

Сообщение Luinnar »

kodx писал(а):
29.03.2010 21:53
Спасибо за ликбез, про все это я уже в курсе.
Хотелось бы заметить, что в приведенной подсказке по генерации паролей есть несколько недочетов, а конкретно:
  • rsa не рекомендуется для шифрования, хотя и является более универсальным, но его стойкость ниже чем у dsa. Поэтому лучше выбирать dsa.

Вопрос весьма и весьма спорный. Есть доказательства? :)
В любом случае, устанавливаем желаемую длину ключа опцией -b и будет вам безопасность.
Хотя если заглянуть в man, то мы увидим, что для RSA по-умолчанию используется длина ключа 2048 и можно указать больше, в то время как для DSA всегда только 1024. Это уже говорит в пользу RSA.
(man ssh-keygen) писал(а):-b bits
Specifies the number of bits in the key to create. For RSA keys, the minimum size is 768 bits and the default is 2048 bits.
Generally, 2048 bits is considered sufficient. DSA keys must be exactly 1024 bits as specified by FIPS 186-2.


Кому интересно и кто знает англ. можете почитать переписку между Ron Rivest (один из авторов RSA) и Leo de Velez, который, как ему казалось, сломал RSA:
http://www.seedmuse.com/rsa_edit.htm
Если кратко, то вот что ответил Ron:
(Ron Rivest) писал(а):Dear Leo --

Thanks for the more detailed explanation of your approach to attacking RSA given in your emails (copied below). For the reasons I will explain, and as you are perhaps aware, I think your approach is unlikely to work in practice against large RSA numbers. It would be very premature or misleading to characterize RSA as "broken" based on your work to date.

On the other hand, the strength of a cryptosystem can only be determined by subjecting it to extensive analysis and attack by all interested parties. I encourage you (and others) to try and find a "shortcut" for breaking RSA faster than the known attacks (which also don't work in practice when the numbers are large). Perhaps you will someday find an attack that works efficiently. (Of course, I rather hope you won't, but I don't want to discourage you from trying!)
...


  • генерировать ключи без пароля это очень плохо, т.к. имея лишь публичный ключ, можно получить приватный.

  • Вам хорошо отвитил /dev/random. Пароль на это не влияет совершенно.

    Надеюсь результаты моего небольшого исследования будут кому-то еще полезны. Тема повисит немного открытой, потом я её закрою, если у кого-то вдруг не найдется консольного решения.

    Будьте уверены, после того как вы всё описали и выложили на этот форум, добытые вами знания не пропадут. ;)
  • Спасибо сказали:
    Аватара пользователя
    sash-kan
    Администратор
    Сообщения: 13939
    Статус: oel ngati kameie
    ОС: GNU

    Re: Сохранение паролей от ssh ключей между сессиями

    Сообщение sash-kan »

    kodx
    обратите внимание на
    keychain - key manager for OpenSSH
    и
    pwsafe - command line encrypted password database manager
    Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
    при сбоях форума см.блог
    Спасибо сказали:
    Аватара пользователя
    t.t
    Бывший модератор
    Сообщения: 7390
    Статус: думающий о вечном
    ОС: Debian, LMDE

    Re: Сохранение паролей от ssh ключей между сессиями

    Сообщение t.t »

    kodx писал(а):
    29.03.2010 21:53
    имея лишь публичный ключ, можно получить приватный
    Это как?..
    ¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
    Спасибо сказали:
    Аватара пользователя
    /dev/random
    Администратор
    Сообщения: 5458
    ОС: Gentoo

    Re: Сохранение паролей от ssh ключей между сессиями

    Сообщение /dev/random »

    t.t писал(а):
    11.04.2010 13:40
    Это как?..

    Это через несколько миллиардов лет ))
    Спасибо сказали:
    Аватара пользователя
    t.t
    Бывший модератор
    Сообщения: 7390
    Статус: думающий о вечном
    ОС: Debian, LMDE

    Re: Сохранение паролей от ssh ключей между сессиями

    Сообщение t.t »

    /dev/random писал(а):
    11.04.2010 14:53
    t.t писал(а):
    11.04.2010 13:40
    Это как?..
    Это через несколько миллиардов лет ))
    А, ну разве что.. (:

    Но пароль подобрать, думаю, не дольше будет. (;
    ¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
    Спасибо сказали: