Iniciar sesión

Ver la versión completa : FTP con confirmacion de entrega?



crossmax
21/09/2011, 09:27
Buenas compañeros!

Tengo una duda tecnica sobre como enviar/recibir unos ficheros de forma automatica a traves de un script en linux y queria preguntaros a ver que os parece y si se os ocurre alguna forma mejor.

El caso es que tengo que recibir unos ficheros y enviar otros (el envío es mas frecuente) de manera automática y habia pensado en hacerlo por ftp. El problema que me surge es que necesito una especie de confirmacion de entrega ya que no quiero moverlos de directorio sin antes saber que han llegado al destinatario correctamente. O al recibirlo, no quiero sobreescribirlo sin saber que el tamaño es correcto.
La conexion a internet puede cortarse en determinados momentos y quiero que la transferencia sea robusta.

Estaba pensando en escribir el output del comando de envio o recepcion en un fichero y despues comprobar en este que las lineas escritas corresponden a una transferencia satisfactoria.

¿Como lo veis? ¿Se os ocurre otra forma mas segura, mas facil o incluso con otro protocolo? ¿ssh quizas...?

Muchas gracias por vuestra "posible" sabiduria!!!

xzakox
21/09/2011, 09:39
Buenas compañeros!

Tengo una duda tecnica sobre como enviar/recibir unos ficheros de forma automatica a traves de un script en linux y queria preguntaros a ver que os parece y si se os ocurre alguna forma mejor.

El caso es que tengo que recibir unos ficheros y enviar otros (el envío es mas frecuente) de manera automática y habia pensado en hacerlo por ftp. El problema que me surge es que necesito una especie de confirmacion de entrega ya que no quiero moverlos de directorio sin antes saber que han llegado al destinatario correctamente. O al recibirlo, no quiero sobreescribirlo sin saber que el tamaño es correcto.
La conexion a internet puede cortarse en determinados momentos y quiero que la transferencia sea robusta.

Estaba pensando en escribir el output del comando de envio o recepcion en un fichero y despues comprobar en este que las lineas escritas corresponden a una transferencia satisfactoria.

¿Como lo veis? ¿Se os ocurre otra forma mas segura, mas facil o incluso con otro protocolo? ¿ssh quizas...?

Muchas gracias por vuestra "posible" sabiduria!!!


El tema es que muchos clientes de ftp salen con retorno 0 aunque hayan fallado (porque el programa en si, no ha fallado), asi que no te puedes fiar del valor de retorno.
Se me ocurre que en el script, después de enviar, lo bajes con otro nombre, y compruebes bien comparando tamaños, o más seguro, una firma md5, que el original y el descargado coincidan. Luego borras el descargado.
Tardará un poco mas de tiempo (por descargar lo ya enviado), pero asi te aseguras.
Mis 2 cents.

sirlol
21/09/2011, 13:13
Y usar un simple scp?

algo asi



scp data user@server:/directory
if ! test $? -eq 0; then
something
else
something
fi

http://support.attachmate.com/techdocs/2116.html

crossmax
22/09/2011, 13:03
Si consigo que el otro extremo con M$ se instale algun ssh supongo que la mejor manera será esa.
De todos modos me esta pasando una cosa que ayer no me pasaba. A ver si sabeis decirme, es un caso de ese de expediente X.
En los scripts que estoy haciendo me creo strings con nombre de directorios y de ficheros y despues dependiendo de lo que necesite los voy concatenando. Ejemplo:

DIR='midirectorio'
FICH='fich1'
O='_old'
cp $DIR/$FICH $DIR/$FICH$O

Ayer me funcionaba, y de hecho en otro PC sigue funcionando, pero en donde lo necesito (que ayer funcionaba), hoy me concatena las cadenas mal, insertando al comienzo cada cadena
midirectorio+fich1 = fich1ectorio + _old = _old1ectorio

¿Sabeis porque puede estar pasando esto? Y porque ayer no me pasaba?

Mil gracais

< - >
Bueno parece que se debió volver loco el fichero .sh y al crear uno nuevo desde cero concatena correctamente los textos

Solo una cosa, al final me he pasado al scp, he instalado un ssh en Win y estoy intentando que no me pida la contraseña al transferir.
He visto que tengo que crear las claves (publica y privada) en el host y copiarlas en el servidor. El problema que tengo es que en el host solo tengo SCP, y no tengo SSH por lo que no puedo generar las claves con ssh-keygen -t
¿Hay alguna forma de que pueda generarlas de otra forma?
Muchas gracias

otto_xd
22/09/2011, 13:25
Podrias crear las claves en otro equipo y que otro las usase?

Supongo que sin mucho problema, tal vez algo de configuracion, pero al fin y al cabo es la gracia, van pareadas.

Saludos

crossmax
22/09/2011, 14:53
Podrias crear las claves en otro equipo y que otro las usase?

Supongo que sin mucho problema, tal vez algo de configuracion, pero al fin y al cabo es la gracia, van pareadas.

Saludos

Basico si se tiene la minima idea de autentificacion, jajaja. A mi se me habia pasado!

El caso es que en el remoto se almacenan en el fichero authorized_keys y en el id_rsa.pub el usuario y el nombre del PC de la forma "nombreusuario@nombremaquina". Ademas en el fichero know_hosts se añade la IP del PC. He cambiado esos campos y no me funciona ¿?¿

otto_xd
22/09/2011, 16:02
Basico si se tiene la minima idea de autentificacion, jajaja. A mi se me habia pasado!

El caso es que en el remoto se almacenan en el fichero authorized_keys y en el id_rsa.pub el usuario y el nombre del PC de la forma "nombreusuario@nombremaquina". Ademas en el fichero know_hosts se añade la IP del PC. He cambiado esos campos y no me funciona ¿?¿

Ahi ya me pillas, porque excepto en una practica que hice algo parecido, no he vuelto a tocar autenticacion con pares de claves xDD

Siento no poder ayudar, pero te uppeo, a ver si te lo solucionan!!

juanvvc
22/09/2011, 16:07
Creo que te falta lo que tienes en negrita, en el comando scp de tu ordenador

scp -i id_rsa fichero.doc elotro.pc:/directorio/en/el/otropc

Si no te falta eso, no he entendido qué te pasa. Se puede configurar para que tome esta opción siempre que contacte con elotro.pc, pero primero a ver si funciona desde línea de comandos y después ya te preocuparás de configurarlo para siempre.

evil_tgn
22/09/2011, 16:13
Desde mi absoluta ignorancia.

Te diria que con Serv.u tienes mogollon de boots que hacen eso que tu pides, la scen warez los ha usado toda la vida, juntamente con los ficheros svf de verificación, en el inframundo hay mogollon de boots preparados para ese trabajo,suerte.

crossmax
23/09/2011, 11:02
Creo que te falta lo que tienes en negrita, en el comando scp de tu ordenador

scp -i id_rsa fichero.doc elotro.pc:/directorio/en/el/otropc

Si no te falta eso, no he entendido qué te pasa. Se puede configurar para que tome esta opción siempre que contacte con elotro.pc, pero primero a ver si funciona desde línea de comandos y después ya te preocuparás de configurarlo para siempre.

Joe macho por mucho que lo intento no hay manera. Donde genero las claves (ubuntu) me entra al remoto sin pass pero en el embebido es imposible.
He seguido esto (http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/)

Algo hace el embebido, o mejor dicho, no hace, para que el remoto le tome como "extraño" y le pida la clave. Las pruebas las hago con SCP porque solo tiene ssh-server y no puedo tipear "ssh pcremoto"

evil_tgn anoto tu idea pero ya que me he pasado al scp voy a ver si lo consigo por no marearme mas

crossmax
04/10/2011, 12:10
Buenas,

Pues juanvvc teniía razon!!! Lo que no sé es que hice para que en ese momento no me funcionara ni con el parametro -i
Parece es que desde los PC con ubuntu no hacia falta el parametro -i para que entrara directamente sin pedir contraseña.
Desde los embebidos si que he tenido que forzarle a que use la clave privada.... no me preguntéis porqué...

Gracias a todos

juanvvc
04/10/2011, 12:33
Mola que tenga razón en algo que ni recordaba haber respondido. Siento no haber visto tus problemas de hace dos semanas, la verdad es que olvidé el hilo :(

En Ubuntu por defecto coge un archivo de identidad que no recuerdo cómo se llamaba. Lo puedes configurar en /etc/ssh/ssh_config. Es posible que esos sistemas embebidos tengan configurada una identidad diferente por defecto, o ninguna en absoluto. Quizá por eso en Ubuntu no tenías que poner el -i (porque por casualidades de la vida tu archivo de identidad ya usaba el nombre por defecto) mientras que en los embebidos tenías que usarlo.

crossmax
04/10/2011, 12:47
Mola que tenga razón en algo que ni recordaba haber respondido. Siento no haber visto tus problemas de hace dos semanas, la verdad es que olvidé el hilo :(

En Ubuntu por defecto coge un archivo de identidad que no recuerdo cómo se llamaba. Lo puedes configurar en /etc/ssh/ssh_config. Es posible que esos sistemas embebidos tengan configurada una identidad diferente por defecto, o ninguna en absoluto. Quizá por eso en Ubuntu no tenías que poner el -i (porque por casualidades de la vida tu archivo de identidad ya usaba el nombre por defecto) mientras que en los embebidos tenías que usarlo.

Efectivamente, seria por algo de eso.
Te agradezco tu ayuda y seria culpa mia que al probar tu sugerencia pusiera algo mal y no me funcionara. Pero gracias a ti despues de dar un par de vueltas de mas acabé probando el -i famoso y funcionó. Ahora me he acordado de actualizar el hilo, ya que llevo uos dias peleandome con crontab, puliendo los scripts...

crossmax
19/10/2011, 13:51
Vuelvo a vueltas con el tema del ssh. A ver si alguien sabe responderme a esta dudilla.

Configurando el par de claves entre el host y el remoto me logueo por ssh automaticamente, y tambien me traigo ficheros del remoto automaticamente, pero en cuanto envio ficheros desde el host al remoto me suelta el aviso de que no tengo al remoto como confiable:

Host 'Ip remoto' is not in the trusted hosts file.
(fingerprint sha1 9d:7f:...)
Do you want to continue connecting) (y/n)

Pero esto solo me lo pide cuando subo ficheros al remoto, no cuando los descargo.
Lo que necesito es saber donde se guarda esa informacion (cuando le contesto que yes) para despues poder replicarla en unos cuantos hosts para que sea una conexion automatica sin confirmacion

Gracias :o

juanvvc
19/10/2011, 14:44
La información sobre hosts conocidos se guarda en $HOME/.ssh/known_hosts (para el usuario) ó /etc/ssh/ssh_knwon_hosts (globales) y puedes organizarla con ssh-keygen. La clave que tienes que pasar de un ordenador a otro está en /etc/ssh/ssh_host_*_key.pub del servidor. Como mínimo con ssh-keygen puedes borrar las claves de hosts en las que ya hayas confiado, aunque no sé cómo puedes añadirlas automáticamente que no sea o bien conectándote con ssh, o bien editando a mano los archivos $HOME/.ssh/known_hosts ó /etc/ssh/ssh_knwon_hosts

Aquí tienes más información muy bien explicada, incluido cómo desactivar el chequeo de hosts: http://www.symantec.com/connect/articles/ssh-host-key-protection

crossmax
21/10/2011, 11:46
Hola!
Gracias por la info y el enlace, la verdad es que es muy completo.
Al final, como al menos me tengo que conectar una vez al linux embebido, me he hecho un script de configuracion que ejecuto una primera y unica vez y asi todo queda probado para que despues se realicen las descargas y envios sin confirmacion.
Me guardo en marcadores tu link ;-)