¿Cómo evitar que me pregunten "Ingrese la frase de contraseña para la clave" cuando estoy haciendo una operación ssh en un host remoto?

45

Estoy ssh en un host remoto (linux, fedora) y quiero hacer la operación ssh (git con bitbucket) allí. Hay ssh-agent ejecutándose en esa máquina,

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

pero cuando quiero git, me obliga a ingresar la frase de contraseña

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

Nota: si opero en esa máquina localmente, no me pedirá que ingrese la frase de contraseña

lirio
fuente
1
No lo he usado, pero hay un comando ssh-add que creo que se usa para ese tipo de cosas
barlop

Respuestas:

82

En mi opinión, la mejor manera de usar ssh

Antes de usar Git, agregue su clave a ssh-agent

Inicie ssh-agent si no se inició:

$ eval `ssh-agent -s`

Agregue su clave privada usando ssh-add

$ ssh-add ~ / .ssh / id_rsa_key
Ingrese la frase de contraseña para /home/user/.ssh/id_rsa_key:
Identidad agregada: /home/user/.ssh/id_rsa_key
(/home/user/.ssh/id_rsa_key)

Compruebe si se agrega la clave (el parámetro es una L minúscula):

$ ssh-add -l
2048 55: 96: 1a: b1: 31: f6: f0: 6f: d8: a7: 49: 1a: e5: 4c: 94: 6f
/home/user/.ssh/id_rsa_key (RSA)

Intenta conectarte a tu servidor Git:

$ ssh git.example.com

Ahora puede usar Git sin indicaciones adicionales de frase de contraseña.

Otras maneras

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt

romano
fuente
pero he usado Git agregue su clave a ssh-agent, entonces, ¿cómo hacerlo? gracias
lily
@ Lily Perdón, no entiendo tu pregunta.
Romano
1
Esta es la solución que funcionó para mí.
Skatox
2
¿Cómo hago que esto sea persistente? Simplemente ponerlo en .bashrc?
pez remo
1
Para su información, evales necesario porque genera comandos que exportan variables de entorno como SSH_AUTH_SOCK que son necesarias. unix.stackexchange.com/questions/351725/…
wisbucky
21

Si ya se está ssh-agentejecutando, puede agregar la clave y deberá ingresar la frase de contraseña una vez, y solo una vez para esa sesión.

ssh-add ~/.ssh/id_rsa

No dice qué sistema operativo está utilizando, pero si resulta ser Linux y Gnome, la aplicación "Contraseñas y claves" (nombre CLI:) seahorsepuede administrarlos para que se desbloqueen cuando inicie sesión (no se requiere frase de contraseña) . Otros entornos de escritorio Linux tienen sus propios administradores. No estoy seguro de qué otro sistema operativo hace aquí.

ams
fuente
3

La razón principal para solicitar la frase de contraseña es que su clave está encriptada, compare estos dos:

  • sin encriptar

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • encriptado

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

Entonces debe hacer uno de los siguientes:

  1. Si está cifrado, puede intentar eliminarlo .
  2. Estás usando la clave incorrecta. Si desea utilizar una clave diferente, especifique otro archivo o edite su ~/.ssh/configy especifique un archivo de identidad diferente ( IdentityFile).
  3. Ejecute ssh-add -lpara enumerar todas sus identidades (luego compare con su local) y verifique con Stash si está usando las teclas correctas (existen en la configuración de Stash).
  4. Si conoce la frase de contraseña y desea automatizarla, intente la siguiente solución:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

Solución de problemas:

  1. Verifique que su agente SSH se esté ejecutando ( eval "$(ssh-agent -s)").
  2. Vuelva a ejecutar git a través de: GIT_TRACE=1 git pullo con GIT_SSH_COMMAND="ssh -vv"(Git 2.3.0+) para depurar su comando nuevamente.
  3. Puede intentar omitir la solicitud de la frase de contraseña (que la redirigirá true), pero no creo que ayude. Si lo solicita, hay una razón para eso y básicamente es obligatorio.

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    
kenorb
fuente
2

El ssh-addprograma inicia un agente que puede contener (y proporcionar) su frase de contraseña. La forma de usarlo de forma remota es en un padre de su shell interactivo (para que el agente no se detenga).

Aquí hay algunas preguntas relacionadas:

Ahora ... conectándose de forma remota , por regla general, su comando no inicia sesión como tal, por lo que no se inicia ssh-add. Podría solucionar este problema ejecutando un script que

  • empieza ssh-agent
  • empieza ssh-add
  • agrega tu llave
  • ejecuta el comando que deseas.

El punto débil es el segundo paso: aún se le solicitará la frase de contraseña, a menos que debilite su seguridad al usar una clave que no tiene frase de contraseña . Algunas personas hacen esto, la mayoría de las personas desaconsejan.

Thomas Dickey
fuente
ssh-addNo inicia el agente. Se conecta a un agente que ya se está ejecutando.
enms.
Gracias. Estoy acostumbrado a hacerlo en scripts separados y pasé por alto la parte que falta.
Thomas Dickey
0

Puede eliminar fácilmente la frase de contraseña de su clave utilizando el siguiente comando

ssh-keygen -p

En el primer mensaje, ingrese la ruta del archivo (o presione Enter para cambiar el valor predeterminado) Segundo mensaje, ingrese la frase de contraseña anterior Siguiente mensaje, solo presione enter para desactivar la frase de contraseña

¡Parece que esta es la forma más fácil!

Justin Samuel
fuente
0

Todavía recibirá un mensaje de contraseña para descifrar la clave privada, incluso si se cargassh-agent hasta que la clave pública SSH correspondiente se agregue al control remoto ~/.ssh/authorized_keys.

Reproducir:

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa: 
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password prompt for private key
  #       (and only then prompt for remote login).
  #       Why? Isn't the private key is already loaded by `ssh-add`?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by `ssh-agent`.

Lo suficientemente confuso. La contraseña de inicio de sesión SSH remota sería suficiente en este caso.

Puedo especular que esto evita agregar su clave pública (que se combina con la clave privada cifrada) sin conocer la contraseña de cifrado para la clave privada correspondiente. De todos modos, es un procedimiento de inicio de sesión único por remoto.

uvsmtid
fuente