password - Hacer que ssh-agent funcione con git desde el shell del comando de Windows
git push (7)
Tengo msysgit instalado, con OpenSSH. Me estoy conectando a un repositorio de gitosis. Desde git bash, he creado un archivo .profile
que ejecuta ssh-agent (si no se está ejecutando) cada vez que se abre git bash, usando este script
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 git, que 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?
Aunque probablemente lo haya resuelto ... use el comando eval
para hacer que el proceso ssh_agent
se adhiera:
eval `ssh-agent.exe`
Luego use ssh-add para agregar las claves que necesita.
En Windows 10, esto funcionó para mí
- ejecutar git bash
-
touch ~/.profile
-
start ~/.profile
para abrir.profile
- agregue lo siguiente a
.profile
#! /bin/bash
eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
Esto se basa en esta respuesta . La única diferencia es que .bashrc
no funcionó, en .profile
lugar .profile
funcionó.
Encontré que la manera más fácil de lograr esto era usar el concurso como el agente SSH y ponerlo.
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 necesitas un concurso con tu llave cargada. Tengo un acceso directo al concurso en mi carpeta de inicio que carga mi clave SSH cuando inicio sesión.
Cuando instala 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 a las sesiones de putty y WinSCP cuando el concurso tiene cargada la tecla. Hace la vida muchísimo más fácil (y segura).
Para msysgit, es posible que deba modificar un poco la solución que ofrece 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
Como puede notar, el único cambio que hice fue en la llamada ps, ya que msysgit no usa -U pero -u
Podría envolver su ejecutable git con un script que .profile
su .profile
, haciendo que se carguen las variables de entorno ssh-agent
.
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.
Tuve el mismo problema que tú, luego intenté agregar este código
#! /bin/bash
eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
en el archivo .bashrc
en mi directorio de inicio. ¡Y funciona!
Solución simple de dos cadenas a partir de esta respuesta :
# ~/.profile
if ! pgrep -q -U `whoami` -x ''ssh-agent''; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh