Я недавно задал вопрос в AskUbuntu о том, чтобы ssh-agent автоматически сохранял мой защищенный паролем ключ для последующего повторного использования без необходимости повторного ввода парольной фразы во время входа в систему bash (без GUI / Gnome ). Я получил хороший bash-скрипт в ответ, но, к сожалению, он вызван запросом ключевой фразы независимо от операции git. Я только хочу, чтобы мне предложили, если их ключ отсутствует в ssh-agent и выполняется удаленная операция git.
Это связано с тем, что я использую $(__git_ps1 "[%s]")
в приглашении bash для отображения ветки git текущего рабочего каталога (pwd
). Поэтому, когда я захожу в машину по ssh, он сразу же запрашивает у меня пароль, прежде чем он может отобразить приглашение bash!
Текущий скрипт из ответ на мой вопрос по AskUbuntu выглядит так:
В ~/.bash_profile
:
# File: ~/.bash_profile
# source ~/.profile, if available
if [[ -r ~/.profile ]]; then
. ~/.profile
fi
# start agent and set environment variables, if needed
agent_started=0
if ! env | grep -q SSH_AGENT_PID >/dev/null; then
echo "Starting ssh agent"
eval $(ssh-agent -s)
agent_started=1
fi
# ssh become a function, adding identity to agent when needed
ssh() {
if ! ssh-add -l >/dev/null 2>-; then
ssh-add ~/.ssh/id_dsa
fi
/usr/bin/ssh "$@"
}
export -f ssh
# another example: git
git() {
if ! ssh-add -l >/dev/null 2>-; then
ssh-add ~/.ssh/id_dsa
fi
/usr/bin/git "$@"
}
export -f git
Итак, как вы можете видеть, функция git запускается при каждой операции git.
Я думал, что git будет использовать ssh
для установления соединения, но он не вызывает функцию ssh()
в приведенном выше сценарии. Как git выполняет ssh-операции? Имеет ли он прямой доступ к / usr / bin / ssh, а не полагается на путь bash?
У вас есть лучший способ сделать это или хороший обходной путь для текущего сценария?