2011-04-26 73 views
2

我最近問了一個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路徑嗎?

你有沒有更好的方法來做到這一點或爲當前腳本一個很好的解決方法?

+0

git可執行文件/ usr/bin/git不是用bash(AFAIK)寫的,所以沒有理由執行你的ssh函數。 – nhed 2011-04-26 13:40:57

+0

@nhed那是我的假設。我想知道我是否可以用bash'ssh'包裝器腳本替換'/ usr/bin/ssh',這樣它會被觸發? – Treffynnon 2011-04-26 13:49:45

+0

聽起來很危險,git的man-page提到了一個env變量GIT_SSH--讓這個指向一個包裝器 - 這可能更清晰。給我一杆 – nhed 2011-04-26 19:06:05

回答

3

即使您以遞歸方式ssh到多個主機,也可以使用代理轉發。當ssh首次請求密鑰時,您的本地代理運行$SSH_ASKPASS並將解鎖的密鑰轉發給主機。請注意,您必須啓用座席轉接(請參閱man 5 ssh_config)。

在〜/ .ssh/Config啓用轉發你需要每臺主機:

Host example.org 
    ForwardAgent yes 

在服務器端代理轉發默認情況下啓用。

如果你不想使用代理轉發出於某種原因,那麼我認爲重寫ssh命令是你唯一的選擇。

+0

我忘記了'AgentForwarding'。良好的通話,它完美適合我特定的工作流程。 – Treffynnon 2011-04-27 08:24:38

-2

我不會在您的密鑰中推薦密碼短語。像gitolite這樣的事情不會很好。考慮使用沒有密碼短語的新密鑰。

我的$ 0.02

+0

我不使用gitolite,所以我沒有看到這是一個問題。我不相信足夠的坐在我的磁盤上有一個無保護的密鑰,我永遠不會有一個,除了一個真正鎖定的自動化進程帳戶。我不明白密碼是如何影響git的,因爲它都是在ssh層處理的,而不是在git本身中處理的。 – Treffynnon 2011-04-26 14:53:25

相關問題