Cómo hacer que ssh reciba la contraseña de stdin

¿Cómo se puede hacer que SSH lea la contraseña de stdin, que no funciona de manera predeterminada?

No se puede con la mayoría de los clientes SSH. Puede solucionarlo utilizando API SSH, como Paramiko para Python. Tenga cuidado de no anular todas las políticas de seguridad.

basado en este post puedes hacer:

Cree un comando que abra una sesión ssh usando SSH_ASKPASS (busque SSH_ASKPASS en man ssh )

$ cat > ssh_session <  

NOTA: Para evitar que ssh intente preguntar en tty usamos setsid

Cree un script que devuelva su contraseña (note echo "echo )

 $ echo "echo your_ssh_password" > /path/to/script_returning_pass 

Hazlos ejecutables

 $ chmod +x ssh_session $ chmod +x /path/to/script_returning_pass 

intentalo

 $ ./ssh_session 

Tenga en cuenta que ssh significa shell seguro, y si almacena su usuario, host y contraseña en archivos de texto sin formato, está engañando a la herramienta y creando una posible brecha de seguridad.

Puede usar sshpass, que está, por ejemplo, en los repositorys oficiales de Debian . Ejemplo:

 $ apt-get install sshpass $ sshpass -p 'password' ssh username@server 

Un viejo post revivir …

Encontré esto mientras buscaba una solución al mismo problema, encontré algo y espero que algún día alguien lo encuentre útil:

  1. Instalar el progtwig ssh-askpass (apt-get, yum …)
  2. Establezca la variable SSH_ASKPASS ( export SSH_ASKPASS=/usr/bin/ssh-askpass )
  3. Desde un terminal, abra una nueva conexión ssh sin una variable TERMINAL indefinida ( setsid ssh user@host )

Esto parece lo suficientemente simple como para ser seguro, pero no se verificó aún (solo se usa en un contexto seguro local).

Aquí estamos.

No estoy seguro de la razón por la que necesita esta funcionalidad, pero parece que puede obtener este comportamiento con ssh-keygen.

Le permite iniciar sesión en un servidor sin utilizar una contraseña al tener una clave RSA privada en su computadora y una clave pública RSA en el servidor.

http://www.linuxproblem.org/art_9.html

La lista de correo de FreeBSD recomienda la biblioteca esperada .

Si necesita un inicio de sesión ssh programático, en realidad debería usar los inicios de sesión de clave pública ; obviamente, hay muchos menos agujeros de seguridad de esta manera en comparación con el uso de una biblioteca externa para pasar una contraseña a través de stdin .

Destilar esta respuesta deja una secuencia de comandos simple y genérica:

 #!/bin/bash [[ $1 =~ password: ]] && cat || SSH_ASKPASS="$0" DISPLAY=nothing:0 exec setsid "$@" 

Guárdelo como pass , haga un pass chmod +x pass y luego úselo de esta manera:

 $ echo mypass | pass ssh user@host ... 

Si su primer argumento contiene password: , pasa su entrada a su salida ( cat ); de lo contrario, inicia lo que se presentó después de configurarse como el progtwig SSH_ASKPASS .

Cuando ssh encuentra con el conjunto SSH_ASKPASS Y DISPLAY , iniciará el progtwig mencionado por SSH_ASKPASS , pasando user@host's password: del sistema user@host's password: