script example ejemplo automatizado bash shell unix ssh sftp

bash - example - sftp linux ejemplo



¿Cómo ejecutar el comando sftp con una contraseña del script Bash? (9)

Necesito transferir un archivo de registro a un host remoto usando sftp desde un host Linux. Me han proporcionado credenciales para el mismo de mi grupo de operaciones. Sin embargo, dado que no tengo control sobre otro host, no puedo generar y compartir claves RSA con el otro host.

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

Encontré una pregunta similar sobre Desbordamiento de pila, Especifique la contraseña para sftp en un guión Bash , pero no hubo una respuesta satisfactoria a mi problema.


Combine sshpass con un archivo de credenciales bloqueado y, en la práctica, es tan seguro como cualquier otro: si tiene la raíz en el buzón para leer el archivo de credenciales, todas las apuestas se desactivarán de todos modos.


Esperar es un gran programa para usar.

En Ubuntu, instálalo con:

sudo apt-get install expect

En una máquina CentOS, instálalo con:

yum install expect

Supongamos que desea establecer una conexión con un servidor sftp y luego cargar un archivo local desde su máquina local al servidor sftp remoto.

#!/usr/bin/expect spawn sftp [email protected] expect "password:" send "yourpasswordhere/n" expect "sftp>" send "cd logdirectory/n" expect "sftp>" send "put /var/log/file.log/n" expect "sftp>" send "exit/n" interact

Esto abre una conexión sftp con su contraseña para el servidor.

Luego va al directorio donde desea cargar su archivo, en este caso "logdirectory"

Esto carga un archivo de registro del directorio local que se encuentra en / var / log / con el nombre de archivo file.log al "directorio de registro" en el servidor remoto


Otra forma sería usar lftp:

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

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

Una alternativa más segura que está disponible ya que LFTP 4.5.0 está configurando la variable de entorno LFTP_PASSWORD y ejecutando lftp con --env-password . Aquí hay un ejemplo completo:

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

LFTP también incluye una característica de reflejo genial (puede incluir la eliminación después de la transferencia confirmada ''--Quitar los archivos de origen''):

lftp -e ''mirror -R /local/log/path/ /remote/path/'' --env-password -u user sftp.foo.com


Puede anular al habilitar Contraseña menos autenticación. Pero debes instalar las claves (pub, priv) antes de ir por eso.

Ejecute los siguientes comandos en el servidor local.

Local $> ssh-keygen -t rsa

Presione ENTER para todas las opciones solicitadas. No es necesario escribir ningún valor.

Local $> cd .ssh Local $> scp .ssh/id_rsa.pub user@targetmachine: Prompts for pwd$> ENTERPASSWORD

Conéctese al servidor remoto con el siguiente comando

Local $> ssh user@targetmachine Prompts for pwd$> ENTERPASSWORD

Ejecute los siguientes comandos en el servidor remoto

Remote $> mkdir .ssh Remote $> chmod 700 .ssh Remote $> cat id_rsa.pub >> .ssh/authorized_keys Remote $> chmod 600 .ssh/authorized_keys Remote $> exit

Ejecute el siguiente comando en el servidor local para probar la autenticación sin contraseña. Debe estar conectado sin contraseña.

$> ssh user@targetmachine


Puede usar lftp interactivamente en un script de shell para que la contraseña no se guarde en .bash_history o similar haciendo lo siguiente:

vi test_script.sh

Agregue lo siguiente a su archivo:

#!/bin/sh HOST=<yourhostname> USER=<someusername> PASSWD=<yourpasswd> cd <base directory for your put file> lftp<<END_SCRIPT open sftp://$HOST user $USER $PASSWD put local-file.name bye END_SCRIPT

Y escriba / salga del editor vi después de editar el host, el usuario, el pase y el directorio para su mecanografía :wq Luego haga que el script ejecutable chmod +x test_script.sh y ejecútelo ./test_script.sh .


Puedes usar sshpass para eso. Debajo están los pasos

  1. Instalar sshpass para Ubuntu - sudo apt-get install sshpass
  2. Agregue la IP remota a su archivo de host conocido si es la primera vez Para Ubuntu -> usuario ssh @ IP -> ingrese ''sí''
  3. dar un comando combinado de scp y sshpass para ello. A continuación se muestra un código de muestra para sshpass -p ''#Password_For_remote_machine'' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps tomcat remoto sshpass -p ''#Password_For_remote_machine'' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps

Recientemente me pidieron que cambiara de ftp a sftp, para asegurar la transmisión de archivos entre los servidores. Estamos utilizando el paquete Tectia SSH, que tiene una opción --password para pasar la contraseña en la línea de comando.

ejemplo: sftp --password="password" "userid"@"servername"

Ejemplo de lote:

( echo " ascii cd pub lcd dir_name put filename close quit " ) | sftp --password="password" "userid"@"servername"

Pensé que debería compartir esta información, ya que estaba viendo varios sitios web, antes de ejecutar el comando de ayuda ( sftp -h ), y me sorprendió ver la opción de contraseña.


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

  1. Usar keychain
  2. Use sshpass (menos seguro, pero probablemente satisfaga sus requisitos)
  3. Use expect (menos seguro y más codificación necesaria)

Si decide darle una oportunidad a sshpass aquí hay un fragmento de script en funcionamiento 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 !


Bash programa para esperar a que sftp solicite una contraseña y luego enviarla:

#!/bin/bash expect -c " spawn sftp username@your_host expect /"Password/" send /"your_password_here/r/" interact "

Es posible que necesite instalar esperar, cambie la redacción de ''Contraseña'' a minúscula ''p'' para que coincida con lo que recibe su aviso. El problema aquí es que expone su contraseña en texto plano en el archivo y en el historial de comandos. Lo cual casi derrota el propósito de tener una contraseña en primer lugar.