Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

[SOLUCIONADO]  SSHFS - Montando directorios remotos con Bash
#1

Hola amigos.
En el marco del proyecto intriga en el que estoy buscando algunas informaciones encontré un script que me parece muy interesante así que aquí, sin mas, se los comparto.
https://whattheserver.com/keep-your-sshf...s-mounted/
Para automatizar la conexiones con el protocolo SSHFS

Bash
  1. #!/bin/bash
  2. ## Author: Michael Ramsey
  3. ## Objective: Check and ensure a remote sshfs mount is mounted. This script assumes you have already have ssh passwordless keypair setup for accessing the remote sshfs mount point.
  4.  
  5. ## How to use.
  6. # Set the below variables to match your needs first.
  7.  
  8. # Then the below script can be run manually or via a cronjob
  9. # sh check_remote_mount.sh
  10.  
  11. #example cronjob path to the script may need to be updated depending on where it was saved.
  12. # * * * * * /bin/bash /root/check_remote_mount.sh > /dev/null
  13.  
  14. ##### User specific variables to edit
  15. #Set local mount directory
  16. mountdir="/mnt/backup"
  17.  
  18. #Remote mount directory
  19. remotemountdir="/root/server-backups"
  20.  
  21. #Set file name to test for in the remote mount directory. Just create an empty file "is_mounted" in the remote mount so we can check if it exists.
  22. remotemounttestfile="/mnt/backup/is_mounted"
  23.  
  24. #Remote hostname or IP
  25. remotehost="something.example.com"
  26.  
  27. #Remote ssh username
  28. remoteuser="root"
  29.  
  30. #SSH IdentityFile path. Please Note: This would be the key like "/root/.ssh/id_rsa" not the pub file "/root/.ssh/id_rsa.pub"
  31. sshIdentityFile="/root/.ssh/id_rsa"
  32.  
  33. #### Do not edit below this line
  34.  
  35. if mountpoint $mountdir && [ -f $remotemounttestfile ]; then
  36.     echo "Mounted"
  37.     RC=$?
  38. else
  39.    echo "Not mounted properly"
  40.    #umount gracefully if possible
  41.    umount $mountdir  > /dev/null 2>&1
  42.  
  43.    #kill any frozen process on the mount
  44.    fuser -k $mountdir  > /dev/null 2>&1
  45.    fusermount -u $mountdir  > /dev/null 2>&1
  46.    umount -l $mountdir  > /dev/null 2>&1
  47.    umount $mountdir  > /dev/null 2>&1
  48.  
  49.    #kill any hung processes and mounts
  50.    pkill -9 sshfs && umount "$mountdir"  > /dev/null 2>&1
  51.  
  52.    #remount backup server
  53.    rm -rf "${mountdir:?}/"* && sshfs -o nonempty,allow_other,IdentityFile=$sshIdentityFile $remoteuser@$remotehost:$remotemountdir $mountdir
  54.  
  55.    if mountpoint $mountdir && [ -f $remotemounttestfile ]; then
  56.     echo "Mounted"
  57.     RC=$?
  58.    else
  59.    echo "Not mounted properly needs fixed manually"
  60.    RC=1
  61.    fi
  62. fi
  63. exit $RC



Saludos.
    ¡Gracias!
#2

Sshfs es usado por intriga de manera muy activa.
Según departamento, sede y usuario se comparten carpetas al conectar a la VPN y se montan como unidades según los permisos de cada usuario.

Es una herramienta muy útil, sí señor.

No podemos regresar
    ¡Gracias!
#3

(15-09-2021, 22:47)Shordi escribió:  Sshfs es usado por intriga de manera muy activa.
Según departamento, sede y usuario se comparten carpetas al conectar a la VPN y se montan como unidades según los permisos de cada usuario.

¿Pero como haces la creación y copia de id_rsa.pub? ¿usuario por usuario? a mano? automático?
¿Donde definís los permisos de cada usuario?
¿Un mismo usuario puede iniciar la sesión en cualquier ordenador?
Saludos.
    ¡Gracias!
#4

Cita:¿Pero como haces la creación y copia de id_rsa.pub? ¿usuario por usuario? a mano? automático?
¿Donde definís los permisos de cada usuario?
¿Un mismo usuario puede iniciar la sesión en cualquier ordenador?
No se utiliza así. No hay id_rsa.pub que transmitir en cada conexión. Lo que haces es crear confianza entre la máquina y el servidor con un usuario estándar en el servidor con ssh-copy-id y a partir de ahí no hay que teclear claves para sshfs en esa máquina. El truco, como creo que ya mencioné en algún lugar respecto a las BBDD es que no es necesario crear un usuario en el servidor por cada operación, tanto de acceso a las BBDD como a las carpetas compartidas. Basta con un usuario con permisos en la BBDD y otro con accesos en el servidor, dejando el tema de limitar los accesos a gambas.

La clave del usuario de las BBDD está compilada con los programas, por lo que no está al alcance de los usuarios de la máquina (a no ser que sean hackers que te descompilen el código... pero ese escenario no se contempla).

El usuario del servidor que comparte las carpetas, tiene limitado el acceso a eso, a las carpetas compartidas nada más (recuerdo haber investigado el tema de las jaulas de root para ssh en su día, pero no recuerdo si lo llegué a impelementar)... y nadie te dice que no puedas tener más de un "usuario compartidor", digamos uno para carpetas Globales y otro para las carpetas por sector.

Los permisos se almacenan y asignan a cada usuario desde la base de datos de Intriga.

Un usuario no es que pueda es que "debe" iniciar sesión en cada máquina de la empresa (me dolía la boca de echar broncas cada vez que pillaba a uno en el ordenador de otro usando un usuario que no era el suyo). Todas tienen establecida la confianza con el "usuario compartidor" del servidor. Al conectar con tu propio usuario se crean las carpetas para montar tus unidades. Cuando te desconectas se desmontan las unidades remotas y no recuerdo si se borraban las carpetas de montaje vacías o se dejaban ahí sin más.

Te adjunto un extracto del código que hace esto. Se ejecuta en el programa que hace la conexión con la VPN (el CCP). En él puedes ver cómo el servidor de VPN 10.8.0.1 es diferente del que comparte las carpetas y cómo el usuario que comparte se llama "administrador".

GAMBAS
  1.     Sector = m.entorno["Sector"]
  2.     If fMain.Permisos.Exist("UD") Then 'Tiene permiso para acceder a las unidades remotas
  3.         Shell "mkdir -p " & User.home &/ "RED" &/ nick & "_privado" Wait  'unidad privada para él. Para que guarde ahí los documentos propios de lso que quiere que se haga copia de seguridad.
  4.         Shell "mkdir -p " & User.home &/ "RED/escaner_" & "'" & sede & "'" Wait 'unidad propia de su centro de trabajo donde el escaner compartido deja los documentos escaneados
  5.         'Estos dos con permiso de grabación porque no tiene sentido el solo lectura aquí
  6.         Shell "sshfs -o reconnect -p 4099 administrador@10.8.0.2:/var/copias/unidades/usuarios" &/ nick & " " & User.home &/ "RED" &/ nick & "_privado" Wait 'montamos la carpeta remota
  7.         Shell "sshfs -o reconnect -p 4099 administrador@10.8.0.2:/var/copias/unidades/" & "'" & sede & "'" &/ "escaner " & User.Home &/ "RED" &/ "escaner_" & "'" & sede & "'" ' montamos la carpeta remota
  8.     Endif
  9.     If fMain.Permisos.Exist("UD_GLOB") Then 'Tiene permisos para conectar con las unidades globales de la empresa
  10.         Shell "mkdir -p " & User.home &/ "RED/Global" Wait
  11.         Shell "mkdir -p " & User.home &/ "RED/Global_" & Sector Wait
  12.         If fMain.Permisos.Exist("UD_GLO_GR") Then 'Permiso de Grabación Global
  13.             perm = ""
  14.         Else
  15.             perm = " -o ro " 'Sólo tiene permisos de lectura
  16.         Endif
  17.         Shell "sshfs -o reconnect " & perm & " -p 4099 administrador@10.8.0.2:/var/copias/unidades/globales/General " & " " & User.home &/ "RED/global" Wait 'unidad compartida con toda la empresa
  18.         Shell "sshfs -o reconnect " & perm & " -p 4099 administrador@10.8.0.2:/var/copias/unidades/globales" &/ Sector & " " & User.Home &/ "RED/global_" & Sector Wait 'compartida con todos los centros pero sólo para el sector al que pertenece el usuario
  19.     Endif



No podemos regresar
    ¡Gracias!
#5

Creo que hay un error, porque usas GLO y GLOB
GAMBAS
  1. fMain.Permisos.Exist("UD")
  2. fMain.Permisos.Exist("UD_GLOB")
  3. fMain.Permisos.Exist("UD_GLO_GR")



Feedback
Te recomiendo que uses la clase Config que hicimos con Tercoide, es mas fiable y esta todo en un solo lugar, ademas que permitiría hacer una versión CLI de Intriga, es decir sin entorno gráfico, usando la misma configuración.
Te aconsejo que separes todo lo que puedas las cosas porque luego cuando trabajemos en grupo sobre gitlab es mas ordenado.
Por ejemplo, todo lo de la configuración va en la clase config y accedes a ella desde el formulario principal o de cualquier otro formulario, es mas se pueden agaragar formularios que hagan otras cosas en el futuro que tu no previste.
Otra cosa, haz un esquema del flujo del programa asi nos lo pasas. El programa "Dia" es ideal para eso pero también vale un papel y lo escaneas.
De esta manera podemos discutir aspectos estructurales antes de codificar lo que evitara hacer varias veces las cosas.

Saludos.
    ¡Gracias!
#6

Cita:Creo que hay un error, porque usas GLO y GLOB

en realidad no uso ninguno de los dos. He modificado en el código toda referencia a la estructura de mi empresa de correprisas para subirla ahí..
 
Cita:Te recomiendo que uses la clase Config que hicimos con Tercoide, es mas fiable y esta todo en un solo lugar,

las configuraciones salen de una base de datos Mysql y  nunca he tenido problemas con ellas. El código que crea el settings desde una tabla parámetros con los campos "programa","variable" y "valor"es éste:

GAMBAS
  1.   r = connections["miconexion"].Exec("select * from parametros where programa=&1", Application.Name)
  2.     While r.Available
  3.         Settings["Entorno/" & r!variable] = Replace(r!valor, "~", User.Home)
  4.         r.MoveNext
  5.     Wend
  6.     Settings["Entorno/version"] = Application.Version
  7.     Settings.Save



Toda modificación posterior se hace vía un formulario que no opera con literales.
 
Cita:ademas que permitiría hacer una versión CLI de Intriga, es decir sin entorno gráfico, usando la misma configuración.

No entiendo esto para qué sirve.
 
Cita:Te aconsejo que separes todo lo que puedas las cosas porque luego cuando trabajemos en grupo sobre gitlab es mas ordenado.
Por ejemplo, todo lo de la configuración va en la clase config y accedes a ella desde el formulario principal o de cualquier otro formulario.

Eso ya lo hace settings. Por lo que vi en su momento Config es lo mismo pero en XML y admitiendo campos vacíos... y no le veo mucha ventaja. Lo miraré más despacio a ver si lo pillo.
 
Cita:, es mas se pueden agregar formularios que hagan otras cosas en el futuro que tu no previste

eso también está previsto vía base de datos
 
Cita:Otra cosa, haz un esquema del flujo del programa asi nos lo pasas. El programa "Dia" es ideal para eso pero también vale un papel y lo escaneas.
De esta manera podemos discutir aspectos estructurales antes de codificar lo que evitara hacer varias veces las cosas.

Ya quisiera yo, pero de momento estoy espulgando el código para quitar todo lo relativo a mi empresa (ya digo que primero hice los programas y luego hice Intriga para controlar los usuarios y los propios programas), son unas 14.000 lineas de código y hay muchas cosas que son propias sólo de la circunstancia en la que se creó. Por lo que no sé todavía cómo va a quedar la estructura global del programa. Sí puedo hacer esquemas parciales sobre lo que voy agregando, creo (bajaré ese Dia a ver qué tal).
Lo que sí voy a abrir es una serie de preguntas en el hilo de "Dudas" sobre cosas que no sé si quitar o no.

Gracias por el feedback

Saludos

No podemos regresar
    ¡Gracias!
#7

(16-09-2021, 10:19)Shordi escribió:  No se utiliza así. No hay id_rsa.pub que transmitir en cada conexión. Lo que haces es crear confianza entre la máquina y el servidor con un usuario estándar en el servidor con ssh-copy-id y a partir de ahí no hay que teclear claves para sshfs en esa máquina.

Escenario
  • Usuarios dos grupos de usuarios, los usuarios pares y los impares user1, user2, user3, user4,user5, user6, user7, user8, userX, userZ donde X es un numero impar y Z es un numero par.
  • Estaciones de trabajo Linux, por ejemplo station1, station2 ... stationN donde N es un numero variable.
  • Servidor de archivos, en adelante server que comparte tres carpetas /var/music, /var/documents, /var/code.
Condiciones
  • En cada estación tiene que poder ingresar cualquier usuario de la empresa, es decir las estaciones no están ligadas a un solo usuario
  • Todas las estaciones de trabajo deben montar esas "carpetas de red" en el sistema de archivos local para el usuario que ingrese en la estación.
  • No se puede usar /etc/fstab, que no me gusta porque, en la practica, esta atado a un solo usuario.
Configuración de una estación de trabajo
  • Creación de usuario admin
  • Instalación y configuración de openssh, openvpn, sshfs, ifconfig, vino
  • Instalación de colector (Programa gambas que falta desarrollar)
  • Si creo un par de claves rsa para admin ¿Luego sirven para todas las estaciones? no veo claro como demonios hacer algo general
Configuración del servidor
  • Creación de usuario admin
  • Instalación y configuración de openssh
  •  
Dejo en blanco a propósito porque lo que yo hice funciona e medias, es decir, que se conecta, se monta pero hay que poner la pasword, lo que hace que no se pueda escalar y automatizar para todo el mundo de una empresa.

Saludos.
    ¡Gracias!
#8

Exacto. ese se es el concepto:

Escenario: Empresa con varios sectores (finanzas, personal, etc.) y varias sedes que tienen, claro, personal de cada sector en cada una de ellas.
(este escenario es idéntico, por ejemplo para un desarrollador independiente que tiene clientes pequeños. Ahí la empresa es él mismo y cada sector se convierte en un cliente distinto. En este caso luego hay que limitar las zonas comunes en la compartición de carpetas vía permisos.)

-Todas las máquinas deben estar dadas de alta y configuradas: openvpn, ssh, sshfs, ifconfig, vino, colector, etc. y la confianza con el servidor ssh establecida. (El programa de configuración de estación de trabajo no está hecho. Como eso no era tan frecuente, no tuve nunca tiempo de estandarizarlo y lo hacía a pedal cada vez que compraba una)

En el servidor de bbdd reside la información de cada máquina y usuario.

En el servidor de ficheros hay carpetas :
-globales, para todos los usuarios,
-sectoriales, es decir para todos los de un sector
-globales por sede, para todos lo de una sede 
-sectoriales por sede
-personales por cada usuario.

Todo esto es independiente de la máquina. La máquina, por su parte, tiene un estado de activa, o no activa y por supuesto registrada en el sistema o no.

Conexión:

Se conecta a la vpn con el fichero de configuración ovpn estándar.
Se comprueba si la máquina es correcta, si no, se aborta.
Se comprueba la clave tecleada por el usuario, si no se aborta
Se comprueba que la clave es correcta y no ha caducado. Si no, se aborta.
Se cargan en memoria los derechos, permisos y propiedades del usuario.
Se conecta a la vpn con el fichero de configuración del usuario
Se crean en los menús del CCP (trayicon) las entradas de menú correspondiente a las aplicaciones globales (testeador de mail, testeador de notas internas y los programas a los que tenga derecho (Finanzas, almacen, etc.).
Se crean, si es que no existen, las carpetas donde han de ser montadas las unidades remotas y se montan las unidades remotas a las que tenga derecho (globales, sectoriales, según sede a la que pertenezca (aunque no esté ubicado en ella) y la personal.
Se deja constancia en los logs de la conexión realizada. (usuario, ippública, hora, etc. etc.)
Si su clave está próxima a caducar se le avisa para que la cambie.
Si así está establecido, se revisa la instalación de los programas de envío de datos y alarmas de hardware para que la máquina siga manteniendo su estatus en la BD

Así:
El número de estaciones de trabajo es ilimitado,
El número de usuarios es ilimitado,
El número de sectores es ilimitado,
El número de sedes es ilimitado,
El tipo de permisos es ilimitado y
todo usuario puede usar cualquier máquina con su usuario y clave, claro, y
todo queda soportado en la base de datos vía programas ccp, intriga y alguno más.

Es lioso de contar... pero te haces una idea.

Saludos

No podemos regresar
    ¡Gracias!
#9

(16-09-2021, 21:36)Shordi escribió:  (El programa de configuración de estación de trabajo no está hecho. Como eso no era tan frecuente, no tuve nunca tiempo de estandarizarlo y lo hacía a pedal cada vez que compraba una)

Yo empece a hacer algo de eso, es para que corra en terminal y en gambas, luego te lo paso
(16-09-2021, 21:36)Shordi escribió:  En el servidor de bbdd reside la información de cada máquina y usuario.

Si el que administra las pc es un solo informático ¿Por que una base de datos alojada en un servidor de bases de datos? en el escenario "Emprendedor autónomo" con un archivo JSON alcanza y sobra o con una Sqlite sobra para registrar parametros de la pc, se comprime y guarda una copia en un periodo de tiempo establecido.
Me animo a decir que para otros escenarios tampoco es necesaria una base de datos con motor, al lo sumo una sqlite. Siempre hablando de la lista de PC y usuarios.
 
(16-09-2021, 21:36)Shordi escribió:  Conexión:

¿Acá te referís a que el usuario ingresa la clave para entrar al sistema Linux en la pc? si es así en donde ingresa la clave exactamente? ¿Se aborta que cosa exactamente?
(16-09-2021, 21:36)Shordi escribió:  todo queda soportado en la base de datos vía programas ccp, intriga y alguno más.

¿Que es un programa CCP?

Saludos.
    ¡Gracias!
#10

Cita:Si el que administra las pc es un solo informático ¿Por que una base de datos alojada en un servidor de bases de datos? en el escenario "Emprendedor autónomo" con un archivo JSON alcanza y sobra o con una Sqlite sobra para registrar parametros de la pc, se comprime y guarda una copia en un periodo de tiempo establecido.
Me animo a decir que para otros escenarios tampoco es necesaria una base de datos con motor, al lo sumo una sqlite. Siempre hablando de la lista de PC y usuarios.
No, no, no. La base de datos es irrenunciable. JSON es un formato de intercambio, un XML para vagos Big Grin Big Grin . No es una herramienta seria para el procesamiento de datos. Sqlite es una "base de datos de escritorio" apropiada para cosas locales, de hecho intriga utiliza una base Sqlite para su utilidad de notas de escritorio, pero tiene un límite inmenso: te ata a la máquina donde resida.
Intriga puede ser solución para el Emprendedor autónomo... pero ¿por qué no ha de instalarse dicho emprendedor una base de datos en su máquina? Es algo que se hace en minuto y medio y puestos a ello y ,¿Por qué atarse a una máquina? Si has de desplazarte a las ubicaciones de los clientes... ¿llevas todo en un portátil? ¿y se se cae o te lo roban?
Todo paso más allá de "soy aficionado y me divierto trasteando con mis programitas" pasa por una base de datos, o propia o contratada. ¿Es que no piensas tener una web? ¿Qué web no trabaja contra una Base de datos? Pues ahí la tienes.
Por último: según el nivel de control que se ejerza sobre las máquinas de los usuarios, pueden llegar a manejarse grandes masas de información. Piensa que controlarás cada sesión de usuario, cada consulta, modificación y creación de datos, cada conexión y desconexión, etc. En mi empresa llegué a manejar tablas de casi un millón de registros... y no veo a sqlite manejando tal volumen de datos y mucho menos a JSON.
Cita:¿Acá te referís a que el usuario ingresa la clave para entrar al sistema Linux en la pc? si es así en donde ingresa la clave exactamente? ¿Se aborta que cosa exactamente?
No. Me refiero a cuando el usuario se conecta a la VPN y teclea su usuario y contraseña en ella. Hice en su momento una versión en la que se coordinaba el usuario del pc con la vpn... pero eso limitaba el uso del sistema en máquinas distintas a la tuya propia.
Cita:¿Que es un programa CCP?
Es el nombre que le puse al programa que te conecta a la vpn y valida y configura los accesos y las comunicaciones dentro del sistema. Es el Control Central de Procesos... el programa malvado de Tron, la película de los 80 Big Grin Big Grin Big Grin

Saludos

No podemos regresar
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)