Це типовий приклад компромісу між безпекою та зручністю. На щастя, існує ряд варіантів. Найбільш підходяще рішення залежить від сценарію використання та бажаного рівня безпеки.
ssh-ключ із парольною фразою, немає ssh-agent
Тепер пароль потрібно вводити кожен раз, коли ключ використовується для автентифікації. Хоча це найкращий варіант з точки зору безпеки, він пропонує найгіршу зручність використання. Це також може призвести до вибору слабкої парольної фрази для того, щоб зменшити тягар її введення повторно.
ssh-ключ із парольною фразою, с ssh-agent
Якщо додати наступне, до ~/.bash_profile
автоматичного запуску ssh-agent
та завантаження ssh-ключів при вході в систему:
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
Тепер пароль потрібно вводити при кожному вході. Хоча дещо краще з точки зору зручності використання, у цього є недолік, який ssh-agent
вимагає ввести парольну фразу незалежно від того, чи слід ключ використовувати під час сеансу входу. Кожен новий логін також породжує окремий ssh-agent
екземпляр, який залишається запущеним із доданими ключами в пам'яті навіть після виходу з системи, якщо явно не знищено.
Для вбивства ssh_agent
під час виходу додайте в~/.bash_logout
if [ -n "$SSH_AUTH_SOCK" ] ; then
eval `/usr/bin/ssh-agent -k`
fi
або наступне до ~/.bash_profile
trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0
Створення декількох ssh-agent
примірників можна уникнути, створивши стійкий комунікаційний сокет для агента у фіксованому місці файлової системи, наприклад у відповіді Колліна Андерсона . Це вдосконалення щодо нерестування декількох екземплярів агентів, однак, якщо явно не вбитий розшифрований ключ все ще залишається в пам'яті після виходу.
На робочих столах ssh-агенти, що входять до середовища робочого столу, наприклад, Gnome Keyring SSH Agent , можуть бути кращим підходом, оскільки вони, як правило, можуть бути запропоновані для запрошення парольної фрази вперше, коли ключ ssh використовується під час сеансу входу, і зберігати розшифрований приватний ключ у пам'яті до кінця сеансу.
ssh-ключ із парольною фразою, с ssh-ident
ssh-ident
- це утиліта, яка може керувати ssh-agent
від вашого імені та завантажувати особистість, якщо потрібно. Він додає ключі лише один раз, коли вони потрібні, незалежно від того, скільки терміналів, ssh або входу в систему вимагає доступу до ssh-agent
. Він також може додавати та використовувати інший агент та різний набір клавіш залежно від хоста, до якого підключений, або звідки викликається ssh каталогу. Це дозволяє виділити ключі при використанні переадресації агентів з різними хостами. Це також дозволяє використовувати кілька облікових записів на таких сайтах, як GitHub.
Щоб увімкнути ssh-ident
, встановіть його та додайте до нього такий псевдонім ~/bash_profile
:
alias ssh='/path/to/ssh-ident'
ssh-ключ із парольною фразою, с keychain
keychain
це невелика утиліта, яка управляє ssh-agent
від вашого імені і дозволяє ssh-agent
продовжувати працювати, коли сеанс входу закінчується. При наступних реєстраціях keychain
підключиться до існуючого ssh-agent
екземпляра. На практиці це означає, що парольну фразу потрібно вводити лише під час першого входу після перезавантаження. У наступних входах використовується незашифрований ключ із наявного ssh-agent
екземпляра. Це також може бути корисним для дозволу безпроблемної аутентифікації RSA / DSA в cron
завданнях без паролів ssh-ключів.
Щоб увімкнути keychain
, встановіть його та додайте щось таке ~/.bash_profile
:
eval `keychain --agents ssh --eval id_rsa`
З точки зору безпеки, ssh-ident
і keychain
гірше , ніж ssh-agent
випадках обмежується часом життя конкретної сесії, але вони пропонують високий рівень зручності. Щоб поліпшити безпеку keychain
, деякі люди додають --clear
опцію до ~/.bash_profile
виклику брелоків. Виконуючи ці парольні фрази, потрібно ввести повторно під час входу, як зазначено вище, але cron
завдання все одно матимуть доступ до незашифрованих ключів після того, як користувач вийде з системи. На keychain
сторінці вікі є більше інформації та прикладів.
ssh-ключ без парольної фрази
З точки зору безпеки, це найгірший варіант, оскільки приватний ключ є повністю незахищеним у випадку його впливу. Однак це єдиний спосіб переконатися, що пароль не потрібно вводити повторно після перезавантаження.
ssh-ключ із парольною фразою, із ssh-agent
, передаючи парольну фразу до ssh-add
сценарію
Хоча це може здатися простою ідеєю передавати пароль ssh-add
через сценарій, наприклад echo "passphrase\n" | ssh-add
, це не так прямо, як здається, як ssh-add
не читає пароль stdin
, а відкривається /dev/tty
безпосередньо для читання .
Це може бути працювало навколо з expect
, інструментом для автоматизації інтерактивних додатків. Нижче наведено приклад сценарію, який додає ключ ssh за допомогою парольної фрази, що зберігається в сценарії:
#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact
Зауважте, що, оскільки пароль зберігається в простому тексті в сценарії, з точки зору безпеки, це навряд чи краще, ніж мати ключ-ключ, що не має пароля. Якщо цей підхід буде використаний, важливо переконатися, що expect
сценарій, що містить парольну фразу, має належні дозволи, встановлені для нього, роблячи його читабельним, доступним для запису та керуванням лише власником ключа.