我最近問了一個question on AskUbuntu關於讓ssh-agent自動保存我的密碼保護密鑰供以後重新使用,而不必在bash登錄(非GUI/Gnome)期間重新輸入密碼。我收到了一個很好的bash腳本,但不幸的是,無論git操作如何,都會觸發它請求密碼。我只想提示他們的密鑰是否已經在ssh-agent中,並且正在執行遠程git操作。如何獲取遠程git操作來觸發ssh-agent的ssh-add事件?
這是由於我在我的bash提示中使用了$(__git_ps1 "[%s]")
來顯示當前工作目錄(pwd
)的git分支。所以當我進入機器時,它會立即要求我輸入密鑰密碼,然後才能顯示bash提示符!
從the answer to my question on 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 "[email protected]"
}
export -f ssh
# another example: git
git() {
if ! ssh-add -l >/dev/null 2>-; then
ssh-add ~/.ssh/id_dsa
fi
/usr/bin/git "[email protected]"
}
export -f git
所以你可以看到git的功能被觸發每個git的操作。
我以爲git會使用ssh
來建立連接,但它似乎並沒有觸發上述腳本中的ssh()
函數。 git如何執行其ssh操作?它直接訪問/ usr/bin/ssh而不是依賴bash路徑嗎?
你有沒有更好的方法來做到這一點或爲當前腳本一個很好的解決方法?
git可執行文件/ usr/bin/git不是用bash(AFAIK)寫的,所以沒有理由執行你的ssh函數。 – nhed 2011-04-26 13:40:57
@nhed那是我的假設。我想知道我是否可以用bash'ssh'包裝器腳本替換'/ usr/bin/ssh',這樣它會被觸發? – Treffynnon 2011-04-26 13:49:45
聽起來很危險,git的man-page提到了一個env變量GIT_SSH--讓這個指向一個包裝器 - 這可能更清晰。給我一杆 – nhed 2011-04-26 19:06:05