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

Если оба интерфейса настраиваются для dhcp, "интерфейс арендатора" не может получить арендный договор dhcp перед "интерфейсом хоста". Нет никакого пути к eth0 для общения с dhcp, если br0 не имеет никакого метода для передачи в сети. IMO необходимо настроить br0 для помех затем, имеют установку eht0 для dhcp.

15
20.01.2015, 17:53
3 ответа

ZSH имеет reexec reexec крюк , который выполняет функцию перед выполненной командой, введенной в командной линии. Вот крючок, который ищет SSH в вашей командной строке и, если он найден, проверяет наличие SSH-агента. Если это не найдено, он запускает брелок.

Таким образом, keychain работает только перед SSH-командами, а затем только при необходимости.

Поместите это в ваш ~ / .zshrc :

function check_ssh {
  [[ $3 =~ '\bssh\b' ]] || return
  [[ -n "$SSH_AGENT_PID" && -e "/proc/$SSH_AGENT_PID" ]] \
    && ssh-add -l >/dev/null && return
  eval `keychain --eval id_dsa --timeout 60`
}    
autoload -U add-zsh-hook
add-zsh-hook preexec check_ssh

Что здесь происходит всякий раз, когда команда введена, Check_SSH вызывается перед выполнением команды.

Первая строка функции проверяет расширенную команду для SSH , используя ZSH Regex. SSH должен иметь границы слова \ b в обе стороны. Если это не найдено, то функция возвращается.

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

Наконец мы начнем брелок с агентом, который должен быть живым в течение часа.

Он по-прежнему оставляет проблему о встроенных SSH, таких как Git или rsync или SCP , так как это не запускает функцию (вы можете добавить их на регеекс).

7
27.01.2020, 19:49

Для zsh я написал набор утилит и оболочек, чтобы делать примерно то, что вы хотите: https://www.vinc17.net/unix/index.en.html#zsh-ssh- utils

На самом деле это даже больше, потому что ssh-agent будет использоваться всеми сеансами входа в систему (рабочий стол или через SSH, и экран GNU также поддерживается, если вы запускаете из него оболочки входа в систему, например с shell -zsh в файле ~ / .screenrc ), и он завершится только после завершения последнего сеанса.

Примечание: я использую только одну парольную фразу для всех своих ключей. Я не уверен в поведении разных парольных фраз; могут потребоваться некоторые изменения.

2
27.01.2020, 19:49

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

Вместо этого добавьте

AddKeysToAgent yes

в ваш .ssh / config

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

16
27.01.2020, 19:49

Теги

Похожие вопросы