(Я прочитал многие вопросы на этом сайте, которые выглядят взаимосвязанными, и я считаю, что это действительно новый вопрос.)
У меня много ключей на многих серверах, и все они защищены парольными фразами.
Мне нравится вводить парольные фразы примерно так же, как я люблю вводить пароли - это реальное снижение производительности.
Команды ssh-agent + ssh-add могут быть использованы в оболочке входа в систему, что означает, что вам нужно вводить вашу фразу-пароль только один раз при входе в систему
Брелок можно использовать, чтобы удерживать ssh-agent живым после выхода из системы, поэтому, например, вы можете иметь его, поэтому вам нужно будет вводить фразу-пароль только один раз при загрузке, или вы можете оставить ее в живых около часа или около того.
У меня проблема в том, что оба эти решения, как правило, инициируются при входе в оболочку (например .zshrc
), полагаются на то, что я ввожу свою фразу-пароль при входе в систему, даже если она мне не понадобится разблокирована. (Я не доволен, что связка ключей поддерживает агента живым бесконечно долго.)
То, что я хотел бы, чтобы мне предлагали пароль (для агента) только при необходимости .
Таким образом, я могу войти на сервер A, сделать что-то, затем ssh на сервер B и в этот момент попросить пароль. Сделайте что-нибудь на сервере B, выйдите из системы. Вернитесь к A, сделайте еще кое-что, снова отправьте ssh в B и не нуждайтесь в моей парольной фразе (она удерживается агентом).
Я отмечаю, что это возможно на графических рабочих столах, таких как Gnome - вы получите всплывающее окно с просьбой ввести ключевую фразу, чтобы разблокировать ваш закрытый ключ, как только вы попытаетесь выполнить ssh. Так что это то, что я после, но с консоли.
Ответы:
Ничего не добавляйте ни в один из сценариев запуска оболочки, это ненужная хакерская атака.
Вместо этого добавьте
в ваш .ssh / config
Таким образом, ssh-add запускается автоматически при первом запуске ssh в другом окне. Вам нужно только повторно ввести свой ключ, когда он истекает из ssh-agent или после перезагрузки.
источник
У Zsh есть
preexec
ловушка, которая выполняет функцию перед выполнением команды, введенной в командной строке. Вот хук, который ищетssh
в вашей командной строке и, если найден, проверяет существование агента ssh. Если это не найдено, он запускает связку ключей.Таким образом, цепочка для ключей запускается только перед командами ssh, и только тогда, когда это необходимо.
Поместите это в свой
~/.zshrc
:Здесь происходит всякий раз, когда команда набирается,
check_ssh
вызывается до ее выполнения.Первая строка функции проверяет расширенную команду на
ssh
использование регулярного выражения Zsh.ssh
должны иметь границы слов по\b
обе стороны. Если это не найдено, функция возвращается.В следующей строке проверяется, есть ли процесс агента SSH в переменной среды, и что этот процесс все еще существует в таблице процессов, а затем к агенту был добавлен хотя бы один ключ. Если все в порядке, то агент ssh настроен, и нам не нужно ничего делать, поэтому он возвращается.
Наконец мы запускаем связку ключей, с агентом, который должен оставаться в живых в течение часа.
Он по- прежнему оставляет проблему о встроенной SSH вещи, как
git
илиrsync
или ,scp
как это не будет вызывать функцию (вы можете добавить их в регулярное выражение).источник
zsh
этого можно создать короткий сценарий с тем же эффектом и поместить егоPATH
перед фактическимssh
клиентом. Может даже работать сrsync
et al, если они читают,PATH
а не работают/usr/bin/ssh
напрямую.Для zsh я написал набор утилит и оболочек для более или менее того, что вы хотите: https://www.vinc17.net/unix/index.en.html#zsh-ssh-utils
На самом деле это делает еще больше, потому что
ssh-agent
он будет использоваться всеми сеансами входа в систему (рабочий стол или через SSH, и GNU Screen также поддерживается, если вы запускаете с него оболочки входа, например, сshell -zsh
помощью~/.screenrc
файла), и он выйдет только после последняя сессия заканчиваетсяПримечание. Я использую только одну фразу-пароль для всех своих ключей. Я не уверен в поведении для разных парольных фраз; там могут потребоваться некоторые изменения.
источник