2010-09-08 29 views
30

我使用OpenSSH安裝了msysgit。我正在連接到一個gitosis回購。從混帳bash中,我創建了一個.profile文件運行的ssh-agent(如果尚未運行),每次git的慶典被打開,using this script獲取ssh-agent使用從Windows命令shell運行的git

SSH_ENV=$HOME/.ssh/environment 

function start_agent { 
    echo "Initialising new SSH agent..." 
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV} 
    echo succeeded 
    chmod 600 ${SSH_ENV} 
    . ${SSH_ENV} > /dev/null 
    /usr/bin/ssh-add; 
} 

# Source SSH settings, if applicable 

if [ -f "${SSH_ENV}" ]; then 
    . ${SSH_ENV} > /dev/null 
    #ps ${SSH_AGENT_PID} doesn't work under cywgin 
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { 
     start_agent; 
    } 
else 
    start_agent; 
fi 

我也使用Git擴展,從運行的git命令Windows命令提示符,而不是git bash。所以,ssh沒有看到正在運行的ssh-agent。有沒有可能解決這個問題?

回答

1

你可以用你的.profile的腳本包裝你的git可執行文件,導致加載ssh-agent環境變量。

要麼將​​一個名爲git的腳本放在路徑中比實際git更早的目錄中,要麼將git擴展配置爲調用您的包裝來代替真正的git。

22

即使你可能已經解決了吧...使用eval命令使ssh_agent過程棒:

eval `ssh-agent.exe` 

然後使用ssh-add添加你需要的按鍵。

+0

這每次打開一個git bash的時候產生一個新的'SSH-agent'頂級流程。 – 2013-09-27 11:06:27

+0

啊,你看,不是真的,至少當我檢查它,如果我沒有記錯,它檢查是否有一個已經運行,否則它會產生過程。現在他們固定它,所以沒有理由再使用這個 – Cu7l4ss 2013-10-13 08:27:11

+0

@ Cu7l4ss如果他們修復它,那麼爲什麼我有這個問題? - 我可以啓動ssh-agent並添加密鑰,但是這會立即消失,'ssh-add -l'返回「代理沒有身份」。我甚至得到這個目標的唯一方法就是你列出的命令。 - 只是fyi,目前還是個問題。 – Zeveso 2013-11-03 21:03:33

24

對於msysgit您可能需要修改了一下解決方案提供由https://help.github.com/articles/working-with-ssh-key-passphrases

declare -x SSH_ENV="$HOME/.ssh/environment" 

# start the ssh-agent 
function start_agent { 
    echo "Initializing new SSH agent..." 
    # spawn ssh-agent 
    ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV" 
    echo succeeded 
    chmod 600 "$SSH_ENV" 
    . "$SSH_ENV" > /dev/null 
    ssh-add 
} 

# test for identities 
function test_identities { 
    # test whether standard identities have been added to the agent already 
    ssh-add -l | grep "The agent has no identities" > /dev/null 
    if [ $? -eq 0 ]; then 
     ssh-add 
     # $SSH_AUTH_SOCK broken so we start a new proper agent 
     if [ $? -eq 2 ];then 
      start_agent 
     fi 
    fi 
} 

# check for running ssh-agent with proper $SSH_AGENT_PID 
if [ -n "$SSH_AGENT_PID" ]; then 
    ps -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null 
    if [ $? -eq 0 ]; then 
    test_identities 
    fi 
else 
    if [ -f "$SSH_ENV" ]; then 
    . "$SSH_ENV" > /dev/null 
    fi 
    ps -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null 
    if [ $? -eq 0 ]; then 
     test_identities 
    else 
     start_agent 
    fi 
fi 

正如你可能會注意到我所做的是在PS呼叫唯一的變化,因爲msysgit不要使用-U但 - ü

+2

請注意,[GitHub上的文章](https://help.github.com/articles/working-with-ssh-key-passphrases/#platform-windows)提供了一個更簡單(可能更穩固)的此腳本版本。 – Ignitor 2015-03-19 09:25:07

+0

他們似乎已經更新了他們的代碼。我想知道你的定製版本是否必要?我建議只是先嚐試​​文章中的解決方案。 – Sean 2017-03-30 19:10:20

37

我有同樣的問題,因爲你的話,我試着在我的主目錄添加此代碼

#! /bin/bash 
eval `ssh-agent -s` 
ssh-add ~/.ssh/*_rsa 

到文件.bashrc。它的工作原理!

+0

這對我有用。我認爲我特別的問題是我需要指定我需要使用的_rsa文件。 – 2015-06-30 15:29:23

+0

謝謝@bricklore :) – 2016-01-19 14:32:33

+0

反覆退出並打開新的bash會話導致每次新會話都會產生一個新的ssh-agent.exe。在@ Braiam的答案中鏈接到的文章中的解決方案阻止了我。 – Sean 2017-03-30 19:13:14

1

我發現實現這一目標最順利的方式是使用Pageant作爲SSH代理和plink。

您需要爲遠程中使用的主機名配置putty會話。

您還需要plink.exe,它可以從與putty相同的站點下載。

而且你需要佩戴你的鑰匙的Pageant運行。我在我的啓動文件夾中有一個快捷方式,用於登錄時加載我的SSH密鑰。

當您安裝git-scm時,可以指定它使用tortoise/plink而不是OpenSSH。最終效果是你可以隨時打開git-bash,並且推/拉而不會對密碼提出挑戰。

同樣適用於putty和WinSCP會話,當pageant加載密鑰時。它讓生活變得更加簡單(和安全)。

9

在Windows 10這個工作對我來說

  1. 運行git bash的
  2. touch ~/.profile
  3. start ~/.profile打開.profile
  4. 以下添加到.profile
#! /bin/bash 
eval `ssh-agent -s` 
ssh-add ~/.ssh/*_rsa 

這是基於this answer。唯一的區別是.bashrc沒有工作,而是.profile工作。

+0

upvote for'touch' – 2016-10-07 07:40:15

+0

這對我有用。謝謝!! – nonintanon 2017-11-18 20:04:03

0

簡單的兩線解決方案this answer

# ~/.profile 
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi 
. ~/.ssh-agent.sh