Недавно я задал вопрос на AskUbuntu о том, как заставить ssh-agent автоматически сохранять мой ключ, защищенный парольной фразой, для последующего повторного использования без необходимости повторного ввода парольной фразы во время входа в систему bash (без GUI/Gnome). В ответ я получил хороший bash-скрипт, но, к сожалению, он срабатывает, чтобы запросить парольную фразу независимо от операции git. Я хочу получить запрос только в том случае, если ключ еще не находится в ssh-agent и выполняется удаленная операция git.
Это связано с тем, что я использую $(__git_ps1 "[%s]")
в командной строке bash для отображения ветки git текущего рабочего каталога (pwd
). Поэтому, когда я подключаюсь к машине по ssh, она сразу же запрашивает ключевую фразу, прежде чем сможет отобразить приглашение bash!
Текущий скрипт из ответа на мой вопрос на AskUbuntu выглядит так:
In ~/.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?
У вас есть лучший способ сделать это или хороший обходной путь для текущего скрипта?
/usr/bin/ssh
скриптом-оболочкой bashssh
, чтобы он запускался? - person Treffynnon   schedule 26.04.2011