Git, clonar con key privada específica, sh.exe no puede encontrar el file

Hago un guion:

#!/bin/bash ##### dest_branch="4.0.8_copy" source="sprint24_copy" ##### dest=$dest_branch source=$source_branch startDir=`pwd` sshFile=$startDir"/git_ssh.ssh" gitrepo="<some valid repo adress>" git_key=$startDir"/key.ssh" sshKey="-----BEGIN RSA PRIVATE KEY----- MIIJJwIBAAKCAgEAs7Rfpca8s4.... and rest of key" echo $sshKey > $git_key echo "ssh -i "$git_key" \$@ "> $sshFile export GIT_SSH=$sshFile export GIT_TRACE=1 git clone git@$gitrepo -b $dest 

Ejecuto este script en Git Bash (C: \ Archivos de progtwig \ Git \ bin \ sh.exe), y este script falló sin este error:

 Cloning into 'neos'... 10:44:26.575804 run-command.c:343 trace: run_command: 'C:/Users/<some user>/Desktop/<some dir>/git_ssh.ssh' 'git@<some valid adress>' 'git-upload-pack '\''<some project>'\''' error: cannot spawn C:/Users/<some user>/Desktop/<some dir>/git_ssh.ssh: No such file or directory fatal: unable to fork 

Intento cambiar el command pwd a la ruta estática como C: / …. c: / … / c / … \ c … c: … C: … pero todavía fallar. ¿Puede alguien ayudarme a especificar otra key privada para clonar git repo? ¿Por qué este sh.exe no puede ver mi file? Estoy seguro de que ese file existe. Yo uso git versión 2.6.4.windows.1. Gracias por su ayuda, y lo siento por mi inglés.

Intento entender el problema Tengo algo de observación.

Yo uso git.exe. git.exe usa la ruta de Windows, pero MinGW usa ambos, y ssh solo usa linux: X

Cuando bash usar GIT_SSH = 'ruta a scrip', entonces git usa algunos como ConvertToWindowsPatch (GIT_SSH). Finalmente, git encuentra el script, ¡pero ahora SSH no puede encontrar el file con la key!

Cuando bash GIT_SSH = 'ssh -vvv' para depurar veo

 bash: ssh: command not found 

Primero pienso en wtf … ¡pero veo que ssh es un alias! Entonces uso GIT_SSH = 'ssh.exe -vvv' y ahora funciona. Desafortunadamente no puedo resolver mi problema de que ssh no vea mi file con la key, pero sé que si escribo el file en C: \, entonces en C ¡este file no existe! Este file está en C: \ Users \\ AppData \ Local \ VirtualStore. No sé cómo puedo save mi key ssh en el file y ssh puede verla, pero tengo otra solución.

Antes de la function principal de script, hago una copy de security de la carpeta .ssh. Luego escribo id_rsa en .ssh y known_host. Entonces quiero clonar a git, pero ssh me preguntan sobre la frase de contraseña … PERO ESTA CLAVE NO HA PASADO. OK cálmate. Cuando pruebo ssh.exe -vvv, veo que sshKey no tiene encabezado, ¡porque escribo esta key sin nuevas líneas! Tengo esto :

 echo $sshKey > $sshKeyFile 

pero correcto es

 echo "$sshKey" > $sshKeyFile 

Ahora todos funcionan correctamente. Veo 2 WTF – primero ssh no ve files en MinGW, segundo si ssh no ve el encabezado de la key sin -vvv no ve esto pero pregunte sobre pase (wtfwtfwtfwtfwtf …)

Esta es la secuencia de commands correcta para manipular git repo (fusionar, presionar, etc.) en bash usando MinGW, git y Windows, con key privada específica de rsa. Lo uso para marge automático y crear twigs en Jenkins en Windows.

 #!/bin/bash ##### dest_branch="4.0.8_copy" source="sprint24_copy" ##### dest=$dest_branch source=$source_branch sshDir="/c/Users/<user>/.ssh" gitrepo="<repo>" sshKeyFile=$sshDir"/id_rsa" knownHostsFile=$sshDir"/known_hosts" sshKey="-----BEGIN RSA PRIVATE KEY----- MIIJKAIBAAKCAgEApH0bkaXa0z7811Sd1ZEG87adPPNWyaya47T3GrCjjnRvVyEk N8jGjh/..." knownHosts="<some host> ecdsa-sha2-nistp256 AAAAE2VjZ..." if [ -a $sshDir ] ; then echo "backup .ssh" cp -r $sshDir $sshDir"_back" echo "usuwanie starego .ssh" rm -r $sshDir echo "tworzenie nowego .ssh" mkdir $sshDir echo "zapis klucza rsa" echo "$sshKey" > $sshKeyFile echo "zapis znanyn hostów" echo $knownHosts > $knownHostsFile echo "wlaczenie debugu gita" export GIT_TRACE=2 echo "wlaczenie debugu echo "clone repo" git clone git@$gitrepo -b $dest #other git operations echo "usuwanie tymczasowego .ssh" rm -r $sshDir echo "odtwrzanie z backupu .ssh" cp -r $sshDir"_back" $sshDir echo "usuwanie backupu" rm -r $sshDir"_back" fi 

Gracias por su ayuda y comentario!