2010-09-08 19 views
30

Tengo msysgit instalado, con OpenSSH. Me estoy conectando a un repositorio de gitosis. Desde la fiesta de git, he creado un archivo .profile que se ejecuta ssh-agent (si no está ya en ejecución) se abre cada vez fiesta de git, using this scriptHaciendo que ssh-agent funcione con git ejecute desde el shell de comandos de Windows

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 

También estoy usando extensiones de git, que se ejecuta el comando git desde el símbolo del sistema de Windows, no git bash. Entonces, ssh no ve el ssh-agent que se está ejecutando. ¿Es posible arreglar esto?

Respuesta

1

Puede envolver su archivo ejecutable git con un script que obtenga .profile, haciendo que se carguen las variables de entorno ssh-agent.

O ponga un script llamado git en un directorio anterior a su ruta que el git real, o configure las extensiones de git para llamar a su contenedor en lugar del git real.

22

A pesar de que es probable que haya resuelto que ... utilice el comando eval a hacer el palo ssh_agent proceso:

eval `ssh-agent.exe` 

A continuación, utilice ssh-add para agregar las claves que necesita.

+0

Esto genera un nuevo proceso de nivel superior ssh-agent' 'cada vez que abra una fiesta de git. –

+0

Ahh, al menos no al menos cuando lo revisé, si recuerdo correctamente, comprueba si ya hay uno ejecutándose, si no genera el proceso. hoy en día lo arreglaron, entonces no hay razón para usarlo – Cu7l4ss

+0

@ Cu7l4ss Si lo arreglaron entonces ¿por qué estoy teniendo este problema ??? - Puedo iniciar el ssh-agent y agregar la clave muy bien ... pero luego se va instantáneamente y 'ssh-add -l' devuelve "el agente no tiene identidades". La única forma en que llegué hasta aquí fue por el comando que enumeró. - Solo fyi, sigue siendo un problema actual. – Zeveso

24

Para msysgit puede que tenga que modificar un poco la solución ofrecida por 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 

se puede notar que el único cambio que hice fue en la llamada PS, ya que no utilizan msysgit -U pero - u

+2

Tenga en cuenta que [el artículo sobre GitHub] (https://help.github.com/articles/working-with-ssh-key-passphrases/#platform-windows) proporciona una versión más simple (probablemente más sólida) de este script. – Ignitor

+0

Parece que han actualizado su código. ¿Sigue siendo necesaria su versión personalizada, me pregunto? Recomiendo probar primero la solución en el artículo. – Sean

37

yo tenía el mismo problema que tú, yo intentado añadir este código

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

en el archivo .bashrc en mi directorio personal. ¡Y funciona!

+0

Esto funcionó para mí. Creo que mi problema particular era que necesitaba especificar el archivo _rsa que necesitaba usar. –

+0

Gracias @bricklore :) –

+0

La repetida salida y apertura de nuevas sesiones bash provocaba que se generara un nuevo ssh-agent.exe con cada nueva sesión. La solución en el artículo vinculado a la respuesta de @ Braiam me lo impide. – Sean

1

Encontré que la manera más fácil de lograr esto era utilizar Pageant como agente SSH y plink.

Necesita tener una sesión de masilla configurada para el nombre de host que se utiliza en su control remoto.

También necesitará plink.exe que se puede descargar desde el mismo sitio que la masilla.

Y necesita concurso con su llave cargada. Tengo un acceso directo al concurso en mi carpeta de inicio que carga mi clave SSH cuando inicio sesión.

Al instalar git-scm, puede especificar que use tortuga/plink en lugar de OpenSSH.

El efecto neto es que puedes abrir git-bash siempre que lo desees y presionar/jalar sin ser cuestionado por las frases de contraseña.

Lo mismo se aplica con las sesiones de masilla y WinSCP cuando se carga la llave del concurso. Hace la vida muchísimo más fácil (y segura).

9

En Windows 10 Esto funcionó para mí

  1. fiesta plazo git
  2. touch ~/.profile
  3. start ~/.profile para abrir .profile
  4. añadir lo siguiente a .profile
#! /bin/bash 
eval `ssh-agent -s` 
ssh-add ~/.ssh/*_rsa 

Esto se basa en this answer. La única diferencia es que .bashrc no funcionó, en su lugar .profile funcionó.

+0

upvote para el 'touch' –

+0

esto funciona para mí. ¡¡Gracias!! – nonintanon

0

solución de dos Simple cadena dethis answer:

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