He proporcionado mi propia respuesta a continuación.
Tenemos varios scripts de bash que funcionan bien con SFTP, lo que me gustaría hacer es simplemente redirigir un ls o dir de una carpeta a un archivo en nuestro servidor SFTP.
Podemos ejecutar esto como un trabajo cron o puedo ejecutarlo manualmente. Puedo ver la lista de archivos desde el servidor remoto, pero quiero generar la lista de archivos desde el servidor remoto al servidor local en un archivo de texto. .
Esto es lo que tengo para el script bash hasta ahora. El cuarto eco que se enumera a continuación es la línea en cuestión.
#!/bin/bash
localpath=/home/localacct/somepath
remotelocation=/home/account/logs/archive
remotehost=' [email protected]'
echo > $localpath/list.sftp
echo "cd $remotelocation " >> $localpath/list.sftp
echo "dir *.* " >> $localpath/list.sftp
echo "dir *.* > $localpath/dirlist.txt " >> $localpath/list.sftp
echo "bye " >> $localpath/list.sftp
sftp -b $localpath/list.sftp $remotehost
exit
shell-script
rsync
sftp
Leptonador
fuente
fuente
ssh $remotehost ls > $localpath/list.sftp
Respuestas:
El
sftp
comando es muy limitado. Si no puede hacer que haga lo que quiere, puede usar otro enfoque, que es montar el directorio remoto con el sistema de archivos SSHFS . SSHFS utiliza SFTP como protocolo de transporte, por lo que el lado del servidor solo ve un cliente SFTP. Debe poder usar FUSE en el lado del cliente.Con SSHFS, monta el directorio remoto en un directorio vacío existente y usa comandos comunes.
fuente
Esto funciona de lejos el mejor:
Puede reenviar la salida a un archivo mediante
fuente
echo 'ls -1a' | sftp hostname
en caso de que alguien encuentre
rsync
que no funciona (para reports.paypal.com en mi caso) encontré el siguiente script usandoexpect
trabajos:Esto está en Mac. En otros sistemas, las
sed
líneas podrían prescindir de los primeros''
argumentos.fuente
El
dir
comando dentro delsftp
cliente no admite la redirección. Ejemplo a continuación, que muestra cómo no hace nada.Página de
sftp
manual para confirma.fuente
Hay otra forma que terminé usando ... Intente usar rsync.
Encontramos lo siguiente:
El script BASH se convierte en:
y funciona muy bien!
fuente
rsync
utilizassh
(por lo tanto, supone que el usuario remoto tiene acceso de shell), nosftp
(un subsistema de ssh que no requiere que el usuario tenga acceso de shell) y supone quersync
está instalado en la máquina remota. Así que bien podría hacerlossh user@host ls /dir > file
También puedes usar
lftp
:O
lftp
también tiene unfind
comando para el listado recursivo.Pasar contraseñas en la línea de comando es generalmente una mala idea. La alternativa es usar la autenticación de clave ssh si es posible (la contraseña anterior se ignorará si la autenticación de clave está disponible, por lo que se convierte en la cadena vacía). O puede pasarlo por el medio ambiente:
O pase los comandos a través de stdin, aquí usando un documento here (implementado con archivos temporales eliminados o tuberías según el shell):
fuente
Entonces también puedes usar este método (con un ejemplo diferente):
fuente
..
lugar deremotelocation
? (3) ¿Has probado esto? ¿Realmente produce resultados razonables? Pregunto porque espero queecho "$a"
funcione mucho mejor queecho $a
. (4) ¿El nombrefct
significa algo?No puedo agregar un comentario pero publico un nuevo comentario de respuesta sobre mi última respuesta.
Sí, lo sé, pero es solo un ejemplo del método, pero escribo esto tan rápido que normalmente prefiero escribir
echo "${a}"
, lo usols -la ..
porque quería probar mi sshd_config (ChrootDirectory) pero reescribo esto mejor:fuente