paralela-ssh con clave SSH protegida con contraseña

8

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

Toda la documentación, con respecto a 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 frase de 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).

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

Nathan S. Watson-Haigh
fuente
¿Asumo que paralela-ssh es lo mismo que pssh?
slm
Sí, parallel-sshy de psshhecho son lo mismo.
Nathan S. Watson-Haigh

Respuestas:

5

Suponiendo que parallel-sshy psshson equivalentes, entonces sí lo que estás tratando de hacer debería funcionar bien con una tubería de la frase de contraseña en el uso del -Ainterruptor.

Ejemplo

Aquí hay un ejemplo donde me conecto a 2 sistemas diferentes, host1y host2. Utilizo el -linterruptor para psshproporcionar un usuario predeterminado de root. Sin embargo, al host2anular esto en el -Hinterruptor 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 el anterior funciona se dará cuenta de la salida del comando que estoy corriendo, echo "hi".

Tu problema

El problema con el que te encuentras con una frase de contraseña en tu par de claves SSH se debe a un error. Este es el error titulado: Problema 80: ¿No pasa la frase de contraseña? . El cuarto comentario a ese problema muestra un parche:

extracto

# 4 robine ... @ gmail.com

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

slm
fuente
Gracias por tu aporte slm. parallel-sshy de psshhecho son lo mismo. No estaba preguntando si era posible, la documentación deja en claro que es posible. Tengo problemas para lograr que funcione, como está documentado.
Nathan S. Watson-Haigh
1
@ NathanS.Watson-Haigh - ver actualización. Es un error, he revisado el parche.
slm
Este es de hecho el problema que me está afectando. Sin embargo, dado que los autores parallel-sshtodavía no están seguros de cuál es la mejor manera de detectar la pregunta de contraseña y responder con la contraseña / frase ingresada, me quedaré con mi método de llavero. No quisiera que mi frase de contraseña se revele inadvertidamente a la pregunta incorrecta.
Nathan S. Watson-Haigh
1
Aceptaré esto como la respuesta, ya que lograste descubrir que se trataba de un error conocido en la forma en que parallel-sshpasa la frase de contraseña SSH. Sin embargo, para aquellos que se encuentren con esta pregunta en el futuro, este error puede haberse solucionado o puede optar por no editar el askpass_client.pyarchivo. En cualquier caso, puede solucionar esto utilizando la keychainrespuesta ( unix.stackexchange.com/a/128998/57414 ) o la respuesta ssh-agent ( unix.stackexchange.com/a/129022/57414 )
Nathan S. Watson- Haigh
5

Logré que esto funcionara instalando en keychainlugar de parchear manualmente el error que causaba mis problemas.

Instalar y ejecutar llavero manualmente

# 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 entrada de contraseña / frase de contraseña

Ahora esta vez no necesito mi frase de 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 manualmente y agregar 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 un reinicio, se le solicite la frase de contraseña de su clave. Su clave permanecerá en el llavero hasta el próximo reinicio o borre el llavero manualmente.

Cron Jobs 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 agriar el mismo archivo antes de ejecutar su cronjob. Por ejemplo, tengo un script de respaldo que se ejecuta a las 21:00 cada noche y copia cosas en 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
Nathan S. Watson-Haigh
fuente
1

Utilice el agente ssh para autenticarse automáticamente (con un nombre de shell como argumento para establecer las variables de entorno del agente en ese nuevo shell). Agregue la clave con ssh-add y escriba su contraseña solo una vez.

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