Если оба интерфейса настраиваются для dhcp, "интерфейс арендатора" не может получить арендный договор dhcp перед "интерфейсом хоста". Нет никакого пути к eth0 для общения с dhcp, если br0 не имеет никакого метода для передачи в сети. IMO необходимо настроить br0 для помех затем, имеют установку eht0 для dhcp.
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
, так как это не запускает функцию (вы можете добавить их на регеекс).
Для zsh я написал набор утилит и оболочек, чтобы делать примерно то, что вы хотите: https://www.vinc17.net/unix/index.en.html#zsh-ssh- utils
На самом деле это даже больше, потому что ssh-agent
будет использоваться всеми сеансами входа в систему (рабочий стол или через SSH, и экран GNU также поддерживается, если вы запускаете из него оболочки входа в систему, например с shell -zsh
в файле ~ / .screenrc
), и он завершится только после завершения последнего сеанса.
Примечание: я использую только одну парольную фразу для всех своих ключей. Я не уверен в поведении разных парольных фраз; могут потребоваться некоторые изменения.
Не добавляйте ничего ни в один из сценариев запуска оболочки, это ненужный хакерский прием.
Вместо этого добавьте
AddKeysToAgent yes
в ваш .ssh / config
Таким образом, ssh-add запускается автоматически при первом использовании ssh в другом окне. Вам нужно только повторно ввести свой ключ, когда он истечет через ssh-agent или после перезагрузки.