#!/bin/bash
## Author: Michael Ramsey
## 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.
## How to use.
# Set the below variables to match your needs first.
# Then the below script can be run manually or via a cronjob
# sh check_remote_mount.sh
#example cronjob path to the script may need to be updated depending on where it was saved.
# * * * * * /bin/bash /root/check_remote_mount.sh > /dev/null
##### User specific variables to edit
#Set local mount directory
mountdir="/mnt/backup"
#Remote mount directory
remotemountdir="/root/server-backups"
#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.
remotemounttestfile="/mnt/backup/is_mounted"
#Remote hostname or IP
remotehost="something.example.com"
#Remote ssh username
remoteuser="root"
#SSH IdentityFile path. Please Note: This would be the key like "/root/.ssh/id_rsa" not the pub file "/root/.ssh/id_rsa.pub"
sshIdentityFile="/root/.ssh/id_rsa"
#### Do not edit below this line
if mountpoint $mountdir && [ -f $remotemounttestfile ]; then
echo "Mounted"
RC=$?
else
echo "Not mounted properly"
#umount gracefully if possible
umount $mountdir > /dev/null 2>&1
#kill any frozen process on the mount
fuser -k $mountdir > /dev/null 2>&1
fusermount -u $mountdir > /dev/null 2>&1
umount -l $mountdir > /dev/null 2>&1
umount $mountdir > /dev/null 2>&1
#kill any hung processes and mounts
pkill -9 sshfs && umount "$mountdir" > /dev/null 2>&1
#remount backup server
rm -rf "${mountdir:?}/"* && sshfs -o nonempty,allow_other,IdentityFile=$sshIdentityFile $remoteuser@$remotehost:$remotemountdir $mountdir
if mountpoint $mountdir && [ -f $remotemounttestfile ]; then
echo "Mounted"
RC=$?
else
echo "Not mounted properly needs fixed manually"
RC=1
fi
fi
exit $RC
(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.
Cita:¿Pero como haces la creación y copia de id_rsa.pub? ¿usuario por usuario? a mano? automático?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.
¿Donde definís los permisos de cada usuario?
¿Un mismo usuario puede iniciar la sesión en cualquier ordenador?
If fMain.Permisos.Exist("UD") Then 'Tiene permiso para acceder a las unidades remotas
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.
Shell "mkdir -p " & User.home &/ "RED/escaner_" & "'" & sede & "'" Wait 'unidad propia de su centro de trabajo donde el escaner compartido deja los documentos escaneados
'Estos dos con permiso de grabación porque no tiene sentido el solo lectura aquí
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
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
Endif
If fMain.Permisos.Exist("UD_GLOB") Then 'Tiene permisos para conectar con las unidades globales de la empresa
Shell "mkdir -p " & User.home &/ "RED/Global" Wait
Shell "mkdir -p " & User.home &/ "RED/Global_" & Sector Wait
If fMain.Permisos.Exist("UD_GLO_GR") Then 'Permiso de Grabación Global
perm = ""
Else
perm = " -o ro " 'Sólo tiene permisos de lectura
Endif
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
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
Endif
fMain.Permisos.Exist("UD")
fMain.Permisos.Exist("UD_GLOB")
fMain.Permisos.Exist("UD_GLO_GR")
Cita:Creo que hay un error, porque usas GLO y GLOB
Cita:Te recomiendo que uses la clase Config que hicimos con Tercoide, es mas fiable y esta todo en un solo lugar,
.Exec("select * from parametros where programa=&1", Application.Name)
While r.Available
Settings["Entorno/" & r!variable] = Replace(r!valor, "~", User.Home)
r.MoveNext
Wend
Settings["Entorno/version"] = Application.Version
Settings.Save
Cita:ademas que permitiría hacer una versión CLI de Intriga, es decir sin entorno gráfico, usando la misma configuración.
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.
Cita:, es mas se pueden agregar formularios que hagan otras cosas en el futuro que tu no previste
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.
(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.
(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)
(16-09-2021, 21:36)Shordi escribió: En el servidor de bbdd reside la información de cada máquina y usuario.
(16-09-2021, 21:36)Shordi escribió: Conexión:
(16-09-2021, 21:36)Shordi escribió: todo queda soportado en la base de datos vía programas ccp, intriga y alguno más.
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.No, no, no. La base de datos es irrenunciable. JSON es un formato de intercambio, un XML para vagos . 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.
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.
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