¿Cómo ejecutar el comando sftp con una contraseña desde el script Bash?

Resuelto anubhava asked hace 13 años • 15 respuestas

Necesito transferir un archivo de registro a un host remoto usando sftp desde un host Linux. Mi grupo de operaciones me proporcionó credenciales para lo mismo. Sin embargo, como no tengo control sobre otro host, no puedo generar ni compartir claves RSA con el otro host.

Entonces, ¿hay alguna manera de ejecutar el sftpcomando (con el nombre de usuario/contraseña proporcionado) desde dentro del script Bash a través de un cron? trabajo

Encontré una pregunta similar de Stack Overflow, Especificar contraseña para sftp en un script Bash , pero no hubo una respuesta satisfactoria a mi problema.

anubhava avatar Mar 22 '11 10:03 anubhava
Aceptado

Tiene algunas opciones además de usar la autenticación de clave pública:

  1. usar llavero
  2. Usar sshpass (menos seguro pero probablemente cumpla con sus requisitos)
  3. Utilice expect (menos seguro y se necesita más codificación)

Si decide darle una oportunidad a sshpass, aquí hay un fragmento de script funcional para hacerlo:

export SSHPASS=your-password-here
sshpass -e sftp -oBatchMode=no -b - sftp-user@remote-host << !
   cd incoming
   put your-log-file.log
   bye
!
anubhava avatar Mar 22 '2011 03:03 anubhava

Otra forma sería utilizar lftp:

lftp sftp://user:password@host  -e "put local-file.name; bye"

La desventaja de este método es que otros usuarios de la computadora pueden leer la contraseña desde herramientas como psy que la contraseña puede convertirse en parte de su historial de shell.

Una alternativa más segura disponible desde LFTP 4.5.0 es configurar la LFTP_PASSWORDvariable de entorno y ejecutar lftp con --env-password. Aquí hay un ejemplo completo:

export LFTP_PASSWORD="just_an_example"
lftp --env-password sftp://user@host  -e "put local-file.name; bye"

# Destroy password after use
export LFTP_PASSWORD=""

LFTP también incluye una interesante función de duplicación (puede incluir eliminación después de una transferencia confirmada --Remove-source-files):

lftp -e 'mirror -R /local/log/path/ /remote/path/' --env-password -u user sftp.foo.com
Karassik avatar Jul 24 '2013 06:07 Karassik