tag password crear comando and git git-bash ssh-agent

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í

  1. ejecutar git bash
  2. touch ~/.profile
  3. start ~/.profile para abrir .profile
  4. 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