Script et LaunchDeamon pour monter un volume afp/smb/nfs au démarrage

lolipale

Membre actif
9 Janvier 2011
878
131
62
Thonon-les-Bains
Bonjour,

Voici un script et un launchdaemon pour monter automatiquement un point de partage (avec remontage automatique en cas d'éjection du volume)
Le script peut être placé dans /usr/local/ dans un dossier scripts par exemple.
Le script doit évidemment être exécutable et ses permissions doivent être root:wheel (sudo chown root:wheel /path/nom_du_script)

Voici le script (mount_smb_share.sh):
Bloc de code:
#!/bin/sh

local_admin_user="xxxxx"                   # an admin user name on the computer running this script
local_admin_pswd="xxxxx"                  # the password for the above user
mount_point="/Volumes/mount_point"         # the name the mounted share point will be known as on this computer

host_name="000.000.000.000"            # the domain name or IP of the system hosting the share point
share_point="share_point"                  # the name of the remote share point
share_owner="xxxxxx"                         # the user name of the owner of the remote share point
share_pswd="xxxxx"                        # the password for the above user

# IMPORTANT:
# If the share_pswd contains any symbol characters, they need to be escaped.
# So, instead of: share_pswd="abc&123#"
# Do this: share_pswd="abc\&123\#"

#--------
# is the share already mounted?
# the result will be the same if the share point is not mounted

if mount | grep "on $mount_point" > /dev/null; then
    echo "mounted"
else

    # let’s clean up just in case the mount was dropped
    echo $local_admin_pswd | sudo -S -u $local_admin_user umount $mount_point
    echo $local_admin_pswd | sudo -S -u $local_admin_user rmdir $mount_point
   
    # basic steps to mount the share point
    echo $local_admin_pswd | sudo -S -u $local_admin_user mkdir $mount_point
    echo $local_admin_pswd | sudo -S -u $local_admin_user chown $local_admin_user $mount_point
    echo $local_admin_pswd | sudo -S -u $local_admin_user chmod +rwx $mount_point
    echo $local_admin_pswd | sudo -S -u $local_admin_user mount_smbfs //$share_owner:$share_pswd@$host_name/$share_point/ $mount_point
fi
exit 0

Voici le LaunchDaemon associé (à placer dans /Library/LaunchDaemons/). Le fichier doit voir les permissions root:wheel pour pouvoir être exécuté au démarrage du système (com.macompagnie.mount_smb_share.plist):

Bloc de code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.macompagnie.mount_smb_share</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/scripts/mount_smb_share.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>90</integer>
</dict>
</plist>
 
Le problème c'est que j'ai pas mal perdu de connaissances en script. je dois modifier quoi dans ces 2 scripts? L'admin, le user, le pswd, l'IP, le volume, le chemin du script?
 
Exactement.
Il faut renseigner les identifiants de l'utilisateur local tournant le script, le "hostname" soit l'adresse IP ou le nom DNS si il y a un serveur DNS, les identifiants du propriétaire du point de partage.
Les variables sont en entête du script.
Le script via le LaunchDaemon se relance toutes les 90 secondes (vous pouvez évidemment changer la valeur).
Votre connexion WIFI établie, il va monter automatiquement le point de partage. Le script ici monte un share smb
 
C'est le nom que vous devez donner à votre LaunchDaemon.
Ajouter .plist à la fin pour le nom du fichier à placer dans /Library/LaunchDaemons/
Vous pouvez l'appeler comme bon vous semble mais il est utile de mettre la fonction utilisée pour s'y retrouver ...

par exemple : com.macg.co.mount.smb.nom.du.point.de.partage pour le label et com.macg.co.mount.smb.nom.du.point.de.partage.plist pour le nom du fichier enregistré
 
Bonjour,

il y a ce qu'on appel fstab / diskarbitration / automount pour faire ceci sous unix-like, sinon sous mac, automator avec un simple script sous le mask de l'admin cela évite de faire ce genre de script qui n'est ni à faire ni à refaire car contenant en clair les `credentials` d'un utilisateur machine.

deuxième approche, au lieu d'utiliser un LaunchDaemon vous pourriez simplement utiliser un LaunchAgent qui accepte <key>UserName</key> c'est principalement la difference entre les deux ; voir documentation.

Cordialement.
 
Dernière édition:
Bonjour,

Vous avez raison pour les identifiants en clair.
Mais pour un particulier, quelle importance ?
Si vous souhaitez récupérer le mot de passe de l'utilisateur courant, vous pouvez utiliser la commande suivante :
Bloc de code:
security find-generic-password -ga $USER 2>&1 | awk 'BEGIN{FS="\042"} /password/ {print $2}'
 
Bonjour,

il y a ce qu'on appel fstab / diskarbitration / automount pour faire ceci sous unix-like, sinon sous mac, automator avec un simple script sous le mask de l'admin cela évite de faire ce genre de script qui n'est ni à faire ni à refaire car contenant en clair les `credentials` d'un utilisateur machine.

deuxième approche, au lieu d'utiliser un LaunchDaemon vous pourriez simplement utiliser un LaunchAgent qui accepte <key>UserName</key> c'est principalement la difference entre les deux ; voir documentation.

Cordialement.

Avec tout mon respect, ça a l'air génial mais c'est juste impossible à faire pour un gars comme moi! La documentation ne m'est d'aucune aide o_O

"It just works"! Là ben Apple n'a rien pour faire un bête truc clé en main qui se connecte à un NAS sans mettre les mains dans le cambouis. Et ça m'énerve depuis que j'ai un NAS, donc depuis 5 ans.

A part une appli moche en login item, qui m'emm**de en se lançant juste 3 secondes dans le Dock ou mettre un volume en login item aussi et qui ouvre une fenêtre de Finder. Et l'appli comme le volume font de toute façon une erreur si je suis pas sur mon réseau local. Ça m'énerve :banghead:
 
Dernière édition:
Bonjour,
Je réveille un fil archéologique, parce que je sèche un peu... J'ai testé le script sh, mais le serveur refuse obstinément la connexion :
server rejected the connection: Authentication error
alors que la même syntaxe saisie dans le dialogue du Finder "Se connecter au serveur" fonctionne parfaitement. J'ai vu quelques échanges sur divers forums, restés sans réponse probante, qui laisseraient supposer que tout ça ne fonctionne plus très bien depuis High Sierra.
Y a-t-il une piste, ou un autre moyen de monter un volume réseau au démarrage sans intervention de l'utilisateur ?
Merci !

Bonjour,

Voici un script et un launchdaemon pour monter automatiquement un point de partage (avec remontage automatique en cas d'éjection du volume)
Le script peut être placé dans /usr/local/ dans un dossier scripts par exemple.
Le script doit évidemment être exécutable et ses permissions doivent être root:wheel (sudo chown root:wheel /path/nom_du_script)

Voici le script (mount_smb_share.sh):
Bloc de code:
#!/bin/sh

local_admin_user="xxxxx"                   # an admin user name on the computer running this script
local_admin_pswd="xxxxx"                  # the password for the above user
mount_point="/Volumes/mount_point"         # the name the mounted share point will be known as on this computer

host_name="000.000.000.000"            # the domain name or IP of the system hosting the share point
share_point="share_point"                  # the name of the remote share point
share_owner="xxxxxx"                         # the user name of the owner of the remote share point
share_pswd="xxxxx"                        # the password for the above user

# IMPORTANT:
# If the share_pswd contains any symbol characters, they need to be escaped.
# So, instead of: share_pswd="abc&123#"
# Do this: share_pswd="abc\&123\#"

#--------
# is the share already mounted?
# the result will be the same if the share point is not mounted

if mount | grep "on $mount_point" > /dev/null; then
    echo "mounted"
else

    # let’s clean up just in case the mount was dropped
    echo $local_admin_pswd | sudo -S -u $local_admin_user umount $mount_point
    echo $local_admin_pswd | sudo -S -u $local_admin_user rmdir $mount_point
  
    # basic steps to mount the share point
    echo $local_admin_pswd | sudo -S -u $local_admin_user mkdir $mount_point
    echo $local_admin_pswd | sudo -S -u $local_admin_user chown $local_admin_user $mount_point
    echo $local_admin_pswd | sudo -S -u $local_admin_user chmod +rwx $mount_point
    echo $local_admin_pswd | sudo -S -u $local_admin_user mount_smbfs //$share_owner:$share_pswd@$host_name/$share_point/ $mount_point
fi
exit 0

Voici le LaunchDaemon associé (à placer dans /Library/LaunchDaemons/). Le fichier doit voir les permissions root:wheel pour pouvoir être exécuté au démarrage du système (com.macompagnie.mount_smb_share.plist):

Bloc de code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.macompagnie.mount_smb_share</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/scripts/mount_smb_share.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>90</integer>
</dict>
</plist>
 
Bonjour,

Si vous souhaitez monter des points de partages ("shares") dans un environnement Active Directory, voici ce qu'il y a de mieux et c'est gratuit : NoMAD
Les points de partages sont montés grâce à une préférence : menu.nomad.shares.plist
En cas d'éjection fortuite du volume, il remonte automatiquement.
Pour faire plus simple il y a aussi (et c'est gratuit) ConnectMeNow
 
Bonjour,
Et merci !
ConnectMeNow est parfait !
NoMAD semble un peu plus compliqué à configurer, je verrai ça à tête reposée :)

Bonjour,

Si vous souhaitez monter des points de partages ("shares") dans un environnement Active Directory, voici ce qu'il y a de mieux et c'est gratuit : NoMAD
Les points de partages sont montés grâce à une préférence : menu.nomad.shares.plist
En cas d'éjection fortuite du volume, il remonte automatiquement.
Pour faire plus simple il y a aussi (et c'est gratuit) ConnectMeNow