Necesito transferir un archivo de registro a un host remoto usando sftp desde un host Linux. Mi grupo de operaciones me ha proporcionado credenciales para lo mismo. Sin embargo, dado que no tengo control sobre otro host, no puedo generar y 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 el script Bash a través de un trabajo cron ?
Encontré una pregunta similar de Stack Overflow, Especifique la contraseña para sftp en un script Bash , pero no hubo una respuesta satisfactoria a mi problema.
SSHPASS=password sshpass -e ...
debería hacer.sshpass -p "my_password" sftp -oPort=9999 user@host:dir/file.log
-oBatchMode=no
fue la pieza crucial que faltaba para mí.Otra forma sería usar lftp:
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 desde LFTP 4.5.0 es configurar la
LFTP_PASSWORD
variable de entorno y ejecutar lftp con--env-password
. Aquí hay un ejemplo completo:LFTP también incluye una función de espejo genial (puede incluir eliminar después de la transferencia confirmada
--Remove-source-files
):fuente
put-script
: luegoopen sftp://user:password@host; put local-file.name; exit
ejecutar Delftp -f put-script
esta manera, no es necesario que tenga el nombre de usuario y la contraseña en una línea de comando y puede configurar permisos restrictivos para su archivo de script.lftp
que perder el tiempo consftp
ysshpass
. Buena respuesta.Esperar es un gran programa para usar.
En Ubuntu, instálalo con:
En una máquina CentOS, instálelo con:
Digamos que desea establecer una conexión con un servidor sftp y luego cargar un archivo local desde su máquina local al servidor remoto sftp
Esto abre una conexión sftp con su contraseña al servidor.
Luego va al directorio donde desea cargar su archivo, en este caso "logdirectory"
Esto carga un archivo de registro desde el directorio local que se encuentra en / var / log / con el nombre de archivo file.log en el "directorio de registro" en el servidor remoto
fuente
Puede usar lftp de forma interactiva en un script de shell para que la contraseña no se guarde en .bash_history o similar haciendo lo siguiente:
Agregue lo siguiente a su archivo:
Y escriba / salga del editor vi después de editar el host, el usuario, el pase y el directorio para escribir el archivo put.
:wq
Luego haga que su script sea ejecutablechmod +x test_script.sh
y ejecútelo./test_script.sh
.fuente
Recientemente me pidieron que cambiara de ftp a sftp, para asegurar la transmisión de archivos entre servidores. Estamos utilizando el paquete Tectia SSH, que tiene la opción
--password
de pasar la contraseña en la línea de comando.ejemplo:
sftp --password="password" "userid"@"servername"
Ejemplo de lote:
Pensé que debería compartir esta información, ya que estaba mirando varios sitios web, antes de ejecutar el comando de ayuda (
sftp -h
), y me sorprendió ver la opción de contraseña.fuente
ps
comando podrá ver su contraseña.unknown option -- - usage: sftp [-1246aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher] [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-R num_requests] [-S program] [-s subsystem | sftp_server] host sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] sftp -b batchfile [user@]host
Puede anular habilitando la contraseña sin autenticación. Pero debe instalar claves (pub, priv) antes de hacerlo.
Ejecute los siguientes comandos en el servidor local.
Presione ENTRAR para todas las opciones solicitadas. No es necesario escribir valores.
Conéctese al servidor remoto con el siguiente comando
Ejecute los siguientes comandos en el servidor remoto
Ejecute el siguiente comando en el servidor local para probar la autenticación sin contraseña. Debe estar conectado sin contraseña.
fuente
lftp -p ${port} -u ${login_id},${password} ${ip_number}
cuando se invoca desde un script de shell los imprimirá en alguna parte? ¿Cómo resolviste aparte de sshpass?lftp
y confío ensshpass
Mac y Linux ambos.Combine sshpass con un archivo de credenciales bloqueado y, en la práctica, es tan seguro como cualquier otra cosa: si tiene root en el cuadro para leer el archivo de credenciales, todas las apuestas están desactivadas de todos modos.
fuente
Programa Bash para esperar a que sftp solicite una contraseña y luego enviarla:
Es posible que deba instalar esperar, cambiar la redacción de 'Contraseña' a 'p' en minúscula para que coincida con lo que recibe su mensaje. El problema aquí es que expone su contraseña en texto plano en el archivo, así como en el historial de comandos. Lo que casi anula el propósito de tener una contraseña en primer lugar.
fuente
Puedes usar sshpass para ello. Debajo están los pasos
sudo apt-get install sshpass
sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps
fuente