Pregunta Especifique la clave SSH privada para usar al ejecutar el comando de shell?


Una situación bastante inusual tal vez, pero quiero especificar una clave SSH privada para utilizar al ejecutar un comando de shell (git) desde la computadora local.

Básicamente así:

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

O incluso mejor (en Ruby):

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

He visto ejemplos de conexión a un servidor remoto con Net :: SSH que usa una clave privada especificada, pero este es un comando local. ¿Es posible?


706
2017-12-30 19:42


origen


Respuestas:


Algo como esto debería funcionar (sugerido por orip):

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

si prefiere las subcapas, puede intentar lo siguiente (aunque es más frágil):

ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)

Git invocará SSH, que encontrará su agente por variable de entorno; esto, a su vez, tendrá la clave cargada.

Alternativamente, configuración HOME también puede hacer el truco, siempre que esté dispuesto a configurar un directorio que contenga solo un .ssh directorio como HOME; esto puede contener un identity.pub, o un archivo de configuración Configurando IdentityFile.


523
2017-12-30 19:48



Ninguna de estas soluciones funcionó para mí.

En cambio, explico la mención de @Martin v. Löwis de establecer un config archivo para SSH.

SSH buscará el usuario ~/.ssh/config archivo. Tengo la configuración de la mía como:

Host gitserv
    Hostname remote.server.com
    IdentityFile ~/.ssh/id_rsa.github
    IdentitiesOnly yes # see NOTES below

Y añado un repositorio remoto de git:

git remote add origin git@gitserv:myrepo.git

Y luego los comandos de git funcionan normalmente para mí.

git push -v origin master

NOTAS

  • los IdentitiesOnly yes se requiere para prevenir el comportamiento predeterminado de SSH de enviar el archivo de identidad que coincide con el nombre de archivo predeterminado para cada protocolo. Si tiene un archivo llamado ~/.ssh/id_rsa eso se probará ANTES ~/.ssh/id_rsa.github sin esta opción

Referencias


869
2018-06-28 19:44



Sugerencias de otras personas sobre ~/.ssh/config son más complicados Puede ser tan simple como:

Host github.com
  IdentityFile ~/.ssh/github_rsa

348
2017-09-17 00:39



A partir de Git 2.3.0 también tenemos el comando simple (no se necesita ningún archivo de configuración):

GIT_SSH_COMMAND='ssh -i private_key_file' git clone user@host:repo.git

224
2018-04-20 17:03



Contenido de my_git_ssh_wrapper:

#!/bin/bash

ssh -i /path/to/ssh/secret/key $1 $2

Entonces puedes usar la clave haciendo:

GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git

121
2018-02-17 01:32



Para resumir las respuestas y comentarios, la mejor manera de configurar git para usar diferentes archivos de claves y luego olvidarse de eso, que también admite diferentes usuarios para el mismo host (por ejemplo, una cuenta personal de GitHub y una de trabajo), que también funciona en Windows, es editar ~/.ssh/config (o c:\Users\<your user>\.ssh\config) y especifique identidades múltiples:

Host github.com
HostName github.com
IdentityFile /path/to/your/personal/github/private/key
User dandv

Host github-work
HostName github.com
IdentityFile /path/to/your/work/github/private/key
User workuser

Luego, para clonar un proyecto como su usuario personal, solo ejecute el git clone mando.

Para clonar el repositorio como workuser, correr git clone git@github-work:company/project.git.


70
2017-09-19 00:19



Con git 2.10+ (Q3 2016: lanzado el 2 de septiembre de 2016), tiene la posibilidad de configurar un config para GIT_SSH_COMMAND (y no solo una variable de entorno como se describe en Rober Jack Willes responder)

Ver commit 3c8ede3 (26 de junio de 2016) por Nguyễn Thái Ngọc Duy (pclouds).
(Fusionado por Junio ​​C Hamano - gitster - en cometer dc21164, 19 de julio de 2016)

Una nueva variable de configuración core.sshCommand ha sido agregado a   especifique qué valor tiene GIT_SSH_COMMAND para usar por repositorio.

core.sshCommand:

Si esta variable está configurada, git fetch y git push usará el comando especificado en lugar de ssh cuando necesitan conectarse a un sistema remoto.
  El comando está en la misma forma que el GIT_SSH_COMMAND variable de entorno y se anula cuando se establece la variable de entorno.

Significa el git clone puede ser:

cd /path/to/my/repo
git config core.sshCommand 'ssh -i private_key_file' 
# later on
git clone host:repo.git

46
2017-07-20 06:47



Como se indica aquí: https://superuser.com/a/912281/607049

Puede configurarlo por repo:

git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
git pull
git push

38
2018-01-12 12:14



Es mejor idea agregar ese host o ip al .ssh/config archivo como tal:

Host (a space separated list of made up aliases you want to use for the host)
    User git
    Hostname (ip or hostname of git server)
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_(the key you want for this repo)

28
2017-10-01 21:55



Fui con la variable de entorno GIT_SSH. Aquí está mi envoltorio, similar al de Joe Block desde arriba, pero maneja cualquier cantidad de argumentos.

Archivo ~ / gitwrap.sh

#!/bin/bash
ssh -i ~/.ssh/gitkey_rsa "$@"

Luego, en mi .bashrc, agregue lo siguiente:

export GIT_SSH=~/gitwrap.sh

28
2018-01-15 16:58



Cuando necesite conectarse a github con una solicitud normal (git pull origin master), configurando el Host como * en ~/.ssh/config funcionó para mí, cualquier otro host (por ejemplo, "github" o "gb") no funcionaba.

Host *
    User git
    Hostname github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_xxx

7
2018-05-06 04:34