¿Cómo ejecutar el comando sftp con una contraseña desde el script Bash?
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 sftp
comando (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.
Tiene algunas opciones además de usar la autenticación de clave pública:
- usar llavero
- Usar sshpass (menos seguro pero probablemente cumpla con sus requisitos)
- 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
!
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 ps
y 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_PASSWORD
variable 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