2012-08-11 19 views
13

Esto es lo que hice:Mi archivo .bashrc no se ejecuta en el arranque Git Bash (Windows 7)

cd ~ 
touch .bashrc 
notepad .bashrc 

y el contenido de mi .bashrc es (que se encuentra en la web en cualquier sitio):

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 

De alguna manera ese script no se ejecuta en absoluto. No veo ninguna de las cadenas que debe hacerse eco. Estoy familiarizado con la línea de comandos de Unix en Linux y Mac OS X, pero no tengo idea de cómo funciona en Windows. Alguna sugerencia por favor?

EDIT: Bueno, mi error ... este script se ejecuta, pero no entiendo completamente lo que hace. Tenía la esperanza de evitar que me pidieran una frase de contraseña cada vez que presiono para el repositorio remoto. Tal como está ahora, todavía me preguntan todo el tiempo.

+0

Este '.bashrc' es totalmente solo UNIX. ¿Qué estás tratando de lograr con tenerlo en tu git bash? – favoretti

+0

Mencioné mi razonamiento al final de mi pregunta después de editar mi pregunta. ¿Cómo puedo conseguir esto? No tengo una comprensión completa de cómo funciona SSH. – codedog

Respuesta

21

¡Bingo! Algo obviamente estaba mal con la forma en que ssh-agent se ejecuta en ese .bashrc. Copié el de here ¡y funciona de maravilla! Ahora solo tengo que ingresar mi frase de contraseña una vez cuando se inicia git bash, y cualquier inserción posterior ya no la necesita.

Aquí es el contenido real de la secuencia de comandos ahora:

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

Ahora que lo hice funcionar, encontré la mejor solución de línea de comandos: Powershell + Console2 + Posh-git! – codedog

+0

Esto funciona! Muchas gracias. :) – wooncherk

+0

+1 TY ... [El ejemplo de GitHub] (https://help.github.com/articles/working-with-ssh-key-passphrases) tampoco funcionó para mí :: este hizo –

0

Prueba de esto, funciona para mí.

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

El mecanismo más simple en Windows es la que de aquí http://anterence.blogspot.co.uk/2012/01/ssh-agent-in-msysgit.html

Modificado para mostrar los nombres de teclas que no sean '' id_rsa, el archivo .bashrc se parece a esto:

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

Estás solicitó la frase de contraseña para cada tecla, pero solo la primera vez que se inicia la máquina.

+1

¡Gracias! Esto funcionó para mí, nada de lo demás. También es bastante fácil de entender. – Dermot

+0

Genial. El único pequeño inconveniente que he visto es que podrías tener un ssh proceso de agente por ventana de git bash. –

Cuestiones relacionadas