Pregunta

¿Hay alguna manera de pasar una contraseña a ssh automáticamente? Me gustaría enviar ssh automáticamente a un servidor sin usando 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 que se ejecuta como un trabajo cron. Este servidor monta mi directorio de inicio después de que me autentica, por lo que el uso de la autenticación de clave pública no funciona ya que ~ / .ssh no está disponible hasta después de que el inicio de sesión sea exitoso. expect (1) está fuera de discusión porque me gustaría ejecutarlo como un trabajo cron, y dado que los trabajos cron no se ejecutan bajo una terminal, la combinación de expect / ssh simplemente no funciona. No tengo acceso de root a ese servidor, y sería difícil lograr que los administradores realicen cambios en la forma en que funcionan las cosas allí.

¿Fue útil?

Solución

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 )

Otros consejos

  

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

Puede ejecutar secuencias de comandos de esperar de cron, al menos puede hacerlo con bibliotecas de espera como " pexpect " para Python Acabo de probar esto para confirmar, ejecutando un script pexpect scp / ssh de cron y pude scp con éxito un archivo de un script 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

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 claves 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 de Stackoverflow:

Esta discusión habla sobre lo que está tratando de hacer:

http://cygwin.com/ml/cygwin/2004-02 /msg01449.html

Si no puede hacer que el administrador cree un directorio local para usted, entonces esto no funcionará.

SSH requiere un "salto de fe" para asegurar el apretón de manos inicial contra futuras manipulaciones. (Inicialmente confía en la clave que le da el servidor)

Un enfoque actualmente disponible pero no conocido es utilizar SSH-SRP. Esto utiliza el conocimiento de la contraseña mutua para autenticarlo y proporcionarle las claves de cifrado de sesión necesarias para cifrar de forma segura su sesión ssh.

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

No use esperar, pexpect o similares para ingresar una contraseña. Si hace eso, su contraseña debe estar en algún lugar en texto plano, lo 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 una discusión de sus opciones: http://www.snailbook.com/faq/no-passphrase.auto. html

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top