que pública publica privadas por pida para llaves llave generar generador copiar contraseña configurar conectarse con clave certificado autenticación authentication scripting ssh passwords expect

authentication - pública - llaves privadas ssh



Automatice SSH sin usar autenticación de clave pública o espere(1) (7)

esperar está fuera de cuestión porque me gustaría ejecutarlo como un trabajo cron, y como los trabajos cron no se ejecutan bajo un terminal, la combinación de expect / ssh simplemente no funciona

Puede ejecutar las secuencias de comandos de esperar de cron, al menos puede esperar bibliotecas como "pexpect" para Python. Acabo de probar esto para confirmar, ejecutando un script pexpect scp / ssh desde cron y pude analizar con éxito un archivo de un script de Python que se ejecuta en cron.

Código de ejemplo:

#!/usr/bin/python import pexpect FILE="/path/to/file" REMOTE_FILE="" USER="user" HOST="example.com" PASS="mypass" COMMAND="scp -oPubKeyAuthentication=no %s %s@%s:%s" % (FILE, USER, HOST, REMOTE_FILE) child = pexpect.spawn(COMMAND) child.expect(''password:'') child.sendline(PASS) child.expect(pexpect.EOF) print child.before

¿Hay alguna manera de pasar una contraseña a ssh automáticamente? Me gustaría enviar ssh automáticamente a un servidor sin usar autenticación de clave pública o esperar scripts, de alguna manera haciendo que ssh lea la contraseña de stdin o un archivo.

La razón por la que tiene que ser así es que me gustaría hacer una copia de seguridad de mis archivos en un servidor usando rsync / ssh ejecutándose como un trabajo cron. Este servidor monta mi directorio de inicio después de que me autentique, por lo que no funciona la autenticación de clave pública ya que ~ / .ssh no está disponible hasta después de que el inicio de sesión sea exitoso. expect (1) está descartado porque me gustaría ejecutarlo como un trabajo cron, y como los trabajos cron no se ejecutan bajo un terminal, la combinación de expect / ssh simplemente no funciona. No tengo acceso de root a ese servidor, y sería difícil conseguir que los administradores hagan cambios en la forma en que funcionan las cosas allí.



Has entendido mal cómo funciona la autenticación de clave pública. No necesita acceder a su directorio de inicio remoto, simplemente coloque la clave pública local en el archivo Remote authorized_keys . Tener un google alrededor, hay muchas guías.


SSH requiere un "acto de fe" para asegurar el primer apretón de manos contra futuras manipulaciones. (Inicialmente confías en la clave que te da el servidor)

Un enfoque actualmente disponible pero poco conocido es usar SSH-SRP. Utiliza el conocimiento de contraseña mutua para autenticarte y proporcionar las claves de cifrado de sesión necesarias para encriptar de forma segura tu sesión ssh.

Es MUCHO más seguro que el inicial de SSH "confía en mí" y no requiere el almacenamiento de claves a largo plazo.


No use expect, pexpect o similares para ingresar una contraseña. Si lo hace, su contraseña debe estar en algún lugar en texto sin formato, que en realidad puede ser menos seguro que usar un par de claves pública / privada sin contraseña. ¡Y es más trabajo!

Lea esta página de "SSH: The Definitive Guide" para ver una discusión de sus opciones: http://www.snailbook.com/faq/no-passphrase.auto.html


En lugar de pasar su contraseña, use un sistema de clave pública / privada. Agregue la clave pública para una máquina a la lista de llaves autorizadas en todas las máquinas a las que desea conectarse. Con este método, SSH puede validar las claves automáticamente y no se requiere contraseña.

Puede encontrar instrucciones aquí: http://linuxproblem.org/art_9.html

Como acabo de leer la pregunta con más cuidado, es posible que desee buscar un cliente SSH diferente que admita la autenticación de contraseña sin interacción del usuario. La búsqueda rápida en Google insinuó que existen ( http://www.derkeiler.com/Newsgroups/comp.security.ssh/2004-12/0134.html )

Preguntas relacionadas con :


Use sshpass .

Por ejemplo, cuando la contraseña está en el archivo password.txt :

sshpass -fpassword.txt ssh username@hostname

(tomado de la respuesta a una pregunta similar )