Instalar y ejecutar manualmente el llavero

Instalar y ejecutar manualmente el llavero

Me gustaría usar mi clave SSH protegida con contraseña al realizar tareas con parallel-ssh(y herramientas relacionadas). Sin embargo, no puedo hacer que esto funcione.

Toda la documentación relacionada con parallel-ssh, muestra que debería poder usar --askpasso -Ahacer esto:

-A
--askpass
      Prompt  for  a  password  and pass it to ssh.  The password may be 
      used for either to unlock a key or for password authentication.  The 
      password is transferred in a fairly secure manner (e.g., it will not 
      show up in argument lists).  However, be aware that a root user on 
      your system could potentially intercept the password.

Sin embargo, cuando ingreso la contraseña de mi clave, no funciona:

$ parallel-ssh --hosts=machines --user=my_user --askpass \
    --timeout=0 --inline -v 'sudo apt-get update'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 09:59:36 [FAILURE] amritiii Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[2] 09:59:37 [FAILURE] gbdev Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[3] 09:59:37 [FAILURE] code Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[4] 09:59:37 [FAILURE] apollo Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[5] 09:59:37 [FAILURE] odin Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[6] 09:59:37 [FAILURE] hathor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[7] 09:59:37 [FAILURE] ldap Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[8] 09:59:37 [FAILURE] thor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[9] 09:59:37 [FAILURE] bioserver Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).

Confirmé que mi clave SSH y mi contraseña funcionan en cada una de las máquinas, por lo que no tengo idea de cómo hacer que esto funcione.

Respuesta1

Suponiendo que parallel-sshy psshson equivalentes, entonces sí, lo que está intentando hacer debería funcionar bien al canalizar la frase de contraseña al usar el -Ainterruptor.

Ejemplo

Aquí hay un ejemplo en el que me conecto a 2 sistemas diferentes host1y host2. Utilizo el -linterruptor psshpara proporcionar un usuario predeterminado de root. Sin embargo, host2anulo esto en el -Hconmutador especificando el nombre de host como user1@host2.

$ pssh -A -i -H "host1 user1@host2" -l root 'echo "hi"'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 21:38:00 [SUCCESS] user1@host2
hi
Stderr: 
This is a private site.  Unauthorized connections are prohibited.  
All activity may be logged.  Disconnect immediately if you object to 
this policy or are not an authorized user.

X11 forwarding request failed on channel 1
Killed by signal 1.
[2] 21:38:00 [SUCCESS] host1
hi
Stderr: 
This is a private site.  Unauthorized connections are prohibited.  
All activity may be logged.  Disconnect immediately if you object to 
this policy or are not an authorized user.

ControlSocket /home/user1/.ssh/[email protected]:22 already exists, disabling multiplexing
X11 forwarding request failed on channel 0
Killed by signal 1.

Cuando lo anterior funcione, notarás el resultado del comando que estoy ejecutando echo "hi".

Tu problema

El problema que está encontrando con una frase de contraseña en su par de claves SSH se debe a un error. Este es el error titulado:Problema 80: ¿No pasas la frase de contraseña?. El cuarto comentario de ese problema muestra un parche:

extracto

#4[correo electrónico protegido]

Cambié la línea a

  if not ( prompt.strip().lower().endswith('password:') or 
        'enter passphrase for key' in prompt.strip().lower()):

Y parece funcionar

Referencias

Respuesta2

Logré que esto funcionara instalando keychainen lugar de parchear manualmente elbichocausando mis problemas.

Instalar y ejecutar manualmente el llavero

# install keychain package
$ sudo apt-get install keychain

# add my key to the keychain, entering passphrase when asked
$ keychain ~/.ssh/id_rsa

# source the file generated by the above command
$ . ~/.keychain/$(uname -n)-sh

Ejecutar comando sin ingresar contraseña/frase de contraseña

Ahora, esta vez no necesito mi contraseña cuando llamo parallel-sshya que el llavero se encarga de la autenticación:

$ parallel-ssh --hosts=machines --user=my_user --timeout=0 'sudo apt-get update'
[1] 14:52:15 [SUCCESS] amritiii 
[2] 14:52:17 [SUCCESS] odin
[3] 14:52:25 [SUCCESS] gmod
[4] 14:53:11 [SUCCESS] bioserver
[5] 14:53:14 [SUCCESS] thor
[6] 14:53:14 [SUCCESS] apollo
[7] 14:53:16 [SUCCESS] gbdev
[8] 14:53:17 [SUCCESS] code
[9] 14:53:18 [SUCCESS] hathor
[10] 14:53:34 [SUCCESS] ldap

Ejecutar llavero al iniciar sesión

En lugar de tener que ejecutar y agregar manualmente su clave al llavero, simplemente agregue lo siguiente al final de su ~/.bash_profile:

$ keychain --clear $HOME/.ssh/id_rsa
$ . $HOME/.keychain/$(uname -n)-sh

Esto garantiza que en su primer inicio de sesión, después de reiniciar, se le solicitará la frase de contraseña de su clave. Su clave permanecerá en el llavero hasta el próximo reinicio o hasta que borre el llavero manualmente.

Trabajos cron usando el llavero

Con lo anterior ingresado en su ~/.bash_profilearchivo, puede aprovechar el hecho de que su clave ahora está almacenada en el llavero al almacenar el mismo archivo antes de ejecutar su cronjob. Por ejemplo, tengo un script de respaldo que se ejecuta a las 21:00 todas las noches y copia cosas a una computadora remota a través de SSH. Esta es una entrada en mi crontab ( crontab -e):

 0 21 * * * . $HOME/.keychain/$(uname -n)-sh; $HOME/backup_script.sh

Respuesta3

Utilizar elagente sshpara autenticarse automáticamente (con un nombre de shell como argumento para tener las variables de entorno del agente configuradas en ese nuevo shell). Añade la clave conssh-añadiry escriba su contraseña solo una vez.

$ ssh-agent bash
$ ssh-add
Enter passphrase for /xxxx/.ssh/identity: 
$ 
$ pssh ...

información relacionada