Un servidor permite conexiones SSH, pero no utiliza la autenticación de clave pública. No está en mi poder cambiar esto en este momento (debido a dificultades técnicas, no organizativas), ¡pero lo abordaré lo antes posible!
Lo que necesito ahora es ejecutar comandos en el servidor utilizando la autenticación de contraseña + cuenta antigua simple desde un script . Es decir, necesito hacerlo de una manera no interactiva. ¿Es posible? ¿Y cómo lo hago?
El cliente que ejecutará el script ejecuta Ubuntu Server 8.04. El servidor ejecuta Cygwin y OpenSSH.
Respuestas:
Hay una utilidad de Linux llamada
sshpass
. Le permite hacer exactamente lo que desea y tomará una contraseña del servidor como argumento de línea de comando o de un archivo (lo prefiero de esta manera, por lo que no tengo la contraseña de mi servidor en el historial de shell) y la usa al igual que:sshpass -f file_with_password ssh user@server ls -la
Esto se enviará a un servidor y se ejecutará
ls -la
. Sin embargo, una cosa es que primero debe ingresar manualmente en un servidor (si aún no lo ha hecho), para que el servidor se agregue a su servidor~/.ssh/known_hosts
. Si no haces eso,sshpass
no funcionará.fuente
SSH_ASKPASS
variable es una solución más genérica que funciona en cualquier sistema con OpenSSH y no requiere la instalación de software adicional. Para algunos de nosotros (en industrias reguladas) la instalación de un nuevo software desencadena mucho trabajo administrativo.SSH_ASKPASS
no funciona en todos los sistemas. Incluso si el cliente lo admite, no funcionará si el servidor lo utilizakeyboard-interactive
. De hecho, me he enfrentado a ese problema al escribir un script para distribuir unauthorized_keys
archivo a varias máquinas integradas.Puedes usar Expect para hacer esto. Obviamente, esto no es preferible desde el punto de vista de la seguridad, ya que requerirá que use un script que contenga su contraseña en texto sin formato. (¡Pero no voy a expresar ese punto ya que usted dijo en su pregunta que planea usar la autenticación de clave pública lo antes posible!)
fuente
Depende un poco del lenguaje de script que use. Escribo casi todo en Python ahora, donde esto no es un problema. Tanto pyssh como Paramiko le permiten simplemente escribir la contraseña sin problemas.
Si tiene la intención de hacerlo con scripts (ba) sh y usa OpenSSH, se vuelve más difícil. OpenSSH le impide explícitamente poner contraseñas en la línea de comando (ya que todos los usuarios pueden ver la línea de comando usando algo como
ps -fe
, que es un mal mojo). En este caso, deberá interactuar directamente con el programa ssh y tener dos opciones:fuente