2012-08-11 11 views
13

Questo è quello che ho fatto:mio file .bashrc non eseguito all'avvio Git Bash (Windows 7)

cd ~ 
touch .bashrc 
notepad .bashrc 

e il contenuto del mio .bashrc è (che si trova sul web da qualche parte):

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 -ef | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null 
    if [ $? -eq 0 ]; then 
    test_identities 
    fi 
# if $SSH_AGENT_PID is not properly set, we might be able to load one from 
# $SSH_ENV 
else 
    if [ -f "$SSH_ENV" ]; then 
    . "$SSH_ENV" > /dev/null 
    fi 
    ps -ef | grep "$SSH_AGENT_PID" | grep -v grep | grep ssh-agent > /dev/null 
    if [ $? -eq 0 ]; then 
     test_identities 
    else 
     start_agent 
    fi 
fi 

In qualche modo questo script non viene eseguito affatto. Non vedo nessuna delle stringhe da far eco. Conosco la linea di comando di Unix in Linux e Mac OS X, ma non ho idea di come funzioni in Windows. Qualche suggerimento per favore?

MODIFICA: Ok, il mio errore ... questo script è stato eseguito, ma non capisco perfettamente cosa faccia. Speravo di evitare di essere richiesto per passphrase ogni volta che spingo al repo remoto. Così com'è ora mi viene comunque chiesto ogni volta.

+0

Questo file '.bashrc' è totalmente UNIX. Cosa stai cercando di ottenere con il tuo git bash? – favoretti

+0

Ho menzionato il mio ragionamento per questo alla fine della mia domanda dopo aver modificato la mia domanda. Come posso raggiungere questo obiettivo? Non ho una piena comprensione di come funziona SSH. – codedog

risposta

21

Bingo! Ovviamente c'era qualcosa di sbagliato nel modo in cui viene eseguito ssh-agent in quel file .bashrc. Ho copiato quello da here e funziona benissimo! Ora devo inserire la mia passphrase una volta sola quando git bash si avvia, e qualsiasi spinta successiva non ne ha più bisogno.

Ecco il contenuto effettivo dello script ora:

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 
+1

Ora che ho capito questo, ho trovato la migliore soluzione da riga di comando: Powershell + Console2 + Posh-git! – codedog

+0

Funziona! Grazie mille. :) – wooncherk

+0

+1 TY ... [Esempio di GitHub] (https://help.github.com/articles/working-with-ssh-key-passphrases) non ha funzionato neanche per me :: questo ha fatto –

0

Prova questo, funziona per me.

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 
8

Il meccanismo più semplice su Windows è quella da qui http://anterence.blogspot.co.uk/2012/01/ssh-agent-in-msysgit.html

modificata per mostrare i nomi dei tasti diversi da 'id_rsa', il file .bashrc assomiglia a questo:

#! /bin/bash 
eval `ssh-agent -s` 
ssh-add ~/.ssh/github_rsa 
ssh-add ~/.ssh/otherkey_rsa 

Sei richiesto la passphrase per ogni chiave a turno, ma solo la prima volta dopo l'avvio di una macchina.

+1

Grazie! Questo ha funzionato per me, nessuno degli altri ha fatto. Molto facile da capire anche – Dermot

+0

Grande. L'unico lieve svantaggio che ho visto è che potresti avere uno ssh -agent process per finestra bash git. –

Problemi correlati