Aller au contenu

Mac - Automatiser Le Montage D'un Volume De Mani


Palaz

Messages recommandés

OK cool.

Je viens de comprendre ce que tu voulais faire! C'est clair que c'est pas mal du tout : ça permet d'avoir des comptes sur le NAS différents de ceux des ordinateurs, ce qui peut être vraiment pratique (pas utile dans mon cas, mais quand même bien pratique et plus "générique"!).

En plus, pour déployer le script, c'est plus simple : il suffit de créer une clé dans le trousseau pour chaque utilisateur, et cette clé peut avoir le même nom (plus de besoin de cette histoire de NAS.automount.<nom d'utilisateur>).

Ecoute, je veux bien ta version mise à jour du script. Je la teste chez moi et si c'est OK, je la met en dispo dans la section téléchargement du forum (ce sera la version 2.6 donc).

En tout cas cool de voir que ce script peut servir à d'autres.

A+

Lien vers le commentaire
Partager sur d’autres sites

voila une nouvelle version:

-- =============== DECLARATION DES VARIABLES ===============

-- Version et nom du script

set script_name to "NAS automount"

set script_version to "2.6"

-- Adresse IP par défaut du serveur

set default_server_on_lan to "192.168.0.1"

set default_server_on_vpn to "10.8.0.1"

-- Adresse MAC du serveur (Attention, si vous avez des 0 (chiffre zéro) dans votre adresse MAC, ne pas les mettre. Par exempe si vous adresse MAC est 01:11:22:33:00:60, il faudra mettre ici 1:11:22:33::6)

set server_mac_address to "11:22:33:44:55:66"

-- Racine de la clé à rechercher dans le trousseau d'accès

set keychain_key_root to "NAS.automount"

-- Delai d'attente pour la détection du serveur (en seconde)

set wait_for_server_delay to 1

-- Répertoire racine de montage pour l'ordinateur sur lequel est exécuté le script

set root_directory to "~/DiskStation"

-- Répertoire de terminal-notifier

set notifier_directory to "/Applications"

-- Volumes à monter et points de montage

-- item 1 : volume du NAS à monter (chemin absolu sur le NAS)

-- item 2 : chemin relatif du point de montage sur la machine sur lequel est exécuté le script (hors rootDirectory déclaré plus haut)

set volumes_to_mount to {{"/videos", "/videos"}, {"/photos", "/photos"}}

-- =============== CORPS DU SCRIPT ===============

-- Test de la presence du serveur sur le réseau

set server to is_server_present_fct(wait_for_server_delay, default_server_on_lan, default_server_on_vpn, server_mac_address)

if server is equal to "-1" then

-- Serveur absent du réseau => on arrête là le script

notifier_fct(notifier_directory, script_name & " " & script_version, "Serveur absent")

return

end if

-- Récupération du nom d'utilisateur

set user to get_user_from_keychain_fct(script_name, script_version, keychain_key_root, root_directory)

if user is equal to "-1" then

return

end if

-- Affichage d'informations avant la saisie du mot de passe

notifier_fct(notifier_directory, script_name & " " & script_version, "Serveur DiskStation trouvé sur " & server & " (Utilisateur : " & user & ")")

-- Récupération du mot de passe

set passwd to get_password_from_keychain_fct(script_name, script_version, keychain_key_root, root_directory)

if passwd is equal to "-1" then

return

end if

-- Affichage d'informations avant la saisie du mot de passe

notifier_fct(notifier_directory, script_name & " " & script_version, "Serveur DiskStation trouvé sur " & server & " (Utilisateur : " & user & ") (mot de passe : " & passwd & ")")

-- Boucle de montage de tous les volumes

repeat with this_volume in volumes_to_mount

set return_value to "-1"

repeat until return_value is equal to "0"

set return_value to mount_try_fct(this_volume, user, passwd, server, root_directory)

if return_value is equal to "-1" then

-- Le mot de passe est incorrect => on arrête là le script

notifier_fct(notifier_directory, script_name & " " & script_version, "Mot de passe incorrect")

return

else

notifier_fct(notifier_directory, script_name & " " & script_version, "Dossier " & item 1 of this_volume & " monté", script_name)

end if

end repeat

end repeat

-- =============== FONCTIONS ===============

-- Fonction d'envoi d'une notification

on notifier_fct(notifier_directory, notification_title, notification_description)

try

do shell script notifier_directory & "/terminal-notifier.app/Contents/MacOS/terminal-notifier -title "" & notification_title & "" -message "" & notification_description & """

end try

end notifier_fct

-- Fonction de recherche du serveur NAS sur le réseau (sur réseau local, puis, à défaut, sur VPN)

-- Valeurs de retour

-- Si serveur trouve : l'adresse IP du serveur

-- Si serveur non trouve : -1

on is_server_present_fct(wait_for_server_delay, server_on_lan, server_on_vpn, server_mac_address)

-- On commence par tester la présence du serveur sur LAN

try

do shell script "ping -o -t " & wait_for_server_delay & " " & server_on_lan

set server_is_present to do shell script "echo $?"

on error

set server_is_present to "1"

end try

if server_is_present is equal to "0" then

-- L'adresse IP du serveur a répondu => on test que c'est bien le serveur avec son adresse MAC

if check_server_mac_adress_fct(server_on_lan, server_mac_address) is equal to "1" then

-- Il s'agit bien du serveur, accessible via LAN

return server_on_lan

end if

end if

-- Si on arrive ici, on test la présence du serveur sur VPN

try

do shell script "ping -o -t " & wait_for_server_delay & " " & server_on_vpn

set server_is_present to do shell script "echo $?"

on error

set server_is_present to "1"

end try

if server_is_present is equal to "0" then

-- Le test de présence d'une adresse IP dans un VPN ne fonctionnant pas (ARP ne marche pas sur les interfaces VPN)

-- on consiède par défaut que l'adresse IP VPN est celle du serveur

return server_on_vpn

end if

-- Aucun serveur détecté => on quitte le script

return "-1"

end is_server_present_fct

-- Fonction permettant de vérifier l'identité du serveur à partir de son adresse MAC

-- Valeurs de retour

-- 0 : l'adresse MAC liée à l'adresse IP passée en argument n'est pas celle du serveur

-- 1 : l'adresse MAC liée à l'adresse IP passée en argument est celle du serveur

on check_server_mac_adress_fct(server_ip_address, server_mac_address)

-- On récupère l'adresse MAC du liée à l'adresse IP donnée en argument, et on la compare avec SED à celle du serveur NAS

set mac_address_comparison to do shell script "arp " & server_ip_address & " | sed -n '/" & server_mac_address & "/='"

if mac_address_comparison is equal to "1" then

return "1"

else

return "0"

end if

end check_server_mac_adress_fct

-- Fonction permettant la récupération le login depuis le trousseau d'accès

-- Valeurs de retour

-- Si erreur : -1

-- Si OK : le login

on get_user_from_keychain_fct(script_name, script_version, keychain_key_root, root_directory)

try

-- Commande qui ne fonctionne qu'à partir de MAC OS X 10.8 (et peut-être 10.7)

-- set user to do shell script "security find-generic-password -g -s " & keychain_key_root & " 2>&1 | sed -n '7p'| sed 's/"acct"<blob>="//g' | sed 's/"//g' | sed -e 's/^ *//g'"

set user to do shell script "security find-generic-password -g -s " & keychain_key_root & " 2>&1 | sed -n '7p'| sed 's/"acct"<blob>="//g' | sed 's/"//g' | sed -e 's/^ *//g'"

return user

on error

notifier_fct(notifier_directory, script_name & " " & script_version, "Impossible de récupérer le login", script_name)

end try

return "-1"

end get_user_from_keychain_fct

-- Fonction permettant la récupération du mot de passe depuis le trousseau d'accès

-- Valeurs de retour

-- Si erreur : -1

-- Si OK : le mot de passe

on get_password_from_keychain_fct(script_name, script_version, keychain_key_root, root_directory)

try

-- Commande qui ne fonctionne qu'à partir de MAC OS X 10.8 (et peut-être 10.7)

-- set passwd to do shell script "security find-generic-password -w -g -s " & keychain_key_root

-- Commande qui fonctionne avec les versions 10.6, 10.7 et 10.8 de MAC OS X

set passwd to do shell script "security find-generic-password -g -s " & keychain_key_root & " 2>&1 | sed -n '1p' | sed 's/password: "//g' | sed 's/"//g'"

return passwd

on error

notifier_fct(notifier_directory, script_name & " " & script_version, "Impossible de récupérer le mot de passe de ", script_name)

end try

return "-1"

end get_password_from_keychain_fct

-- Fonction de montage d'un volume

-- Valeurs de retour

-- 0 : tout s'est bien passé

-- -1 : ça s'est mal passé

on mount_try_fct(this_volume, user, passwd, server, root_directory)

try

-- Création du point de montage

set mount_point to item 2 of this_volume

do shell script "/bin/mkdir -p " & root_directory & mount_point

-- Deconnexion éventuelle de ce point de montage

try

do shell script "/sbin/umount " & root_directory & mount_point

end try

-- Récupération du volume à monter

set volume_to_mount to item 1 of this_volume

-- Création des arguments à passer à la commande shell mount_afp

set afp_args to "afp://" & user & ":" & passwd & "@" & server & volume_to_mount & " " & root_directory & mount_point

-- Montage du volume

try

do shell script "/sbin/mount_afp " & afp_args

return "0"

on error

-- Echec du montage

return "-1"

end try

end try

return "-1"

end mount_try_fct

par contre j'ai juste une dernière question :

quel est la différence entre monter les lecteurs avec ou sans point de montage comme ceci : afp://compte:passwd@Nas/music/ ?

voila j'ai peux être fais une coquille

via

PS : pour ceux qui veulent tester : j'ai du autoriser l'accès a cette clef du trousseau a toutes les applications et sur le nas, faut autoriser le protocole ICMP !!!

Lien vers le commentaire
Partager sur d’autres sites

Re,

OK j'ai testé ton script et ça marche nickel. Je vais également basculer chez moi avec cette nouvelle version.

Quelques remarques/réponses :

- j'ai "cleané" un peu le code à partir de ta version (genre des vieux trucs que je devais faire depuis longtemps)

- j'ai cleané également un peu ton code (genre ne pas afficher le mot de passe récupéré dans le trousseau dans les messages de notification ^_^ )

- pour l'autorisation à cette clé du trousseau, pas la peine de donner les droits à toutes les applis : au premier lancement du script, OS X te demande si tu veux donner un accès permanent à cette clé au script. Si tu cliques sur OK, ça sera bon et limité au seul script (en réalité à l'utilitaire "security" si tu regardes les propriétés de la clé une fois l'autorisation permanente donnée)

- Pour ta question sur mount_afp, si tu ne donnes pas de point de montage, mount_afp te renverra une erreur car il ne saura pas où monter ton dossier réseau sur ton ordinateur local. Ais-je bien répondu ou suis-je à côté de la plaque (i.e. je n'ai peut-être pas bien compris ta question)?

Bon, je mets cette nouvelle version sur la page des téléchargements du forum dans la foulée de cette réponse =>

Encore merci à toi pour cette proposition d'évolution.

A+

Modifié par gargaben
Lien vers le commentaire
Partager sur d’autres sites

Re,

OK j'ai testé ton script et ça marche nickel. Je vais également basculer chez moi avec cette nouvelle version.

Quelques remarques/réponses :

- j'ai "cleané" un peu le code à partir de ta version (genre des vieux trucs que je devais faire depuis longtemps)

- j'ai cleané également un peu ton code (genre ne pas afficher le mot de passe récupéré dans le trousseau dans les messages de notification ^_^ )

- pour l'autorisation à cette clé du trousseau, pas la peine de donner les droits à toutes les applis : au premier lancement du script, OS X te demande si tu veux donner un accès permanent à cette clé au script. Si tu cliques sur OK, ça sera bon et limité au seul script (en réalité à l'utilitaire "security" si tu regardes les propriétés de la clé une fois l'autorisation permanente donnée)

- Pour ta question sur mount_afp, si tu ne donnes pas de point de montage, mount_afp te renverra une erreur car il ne saura pas où monter ton dossier réseau sur ton ordinateur local. Ais-je bien répondu ou suis-je à côté de la plaque (i.e. je n'ai peut-être pas bien compris ta question)?

Bon, je mets cette nouvelle version sur la page des téléchargements du forum dans la foulée de cette réponse =>

Encore merci à toi pour cette proposition d'évolution.

A+

-on est d'accord sur l'affichage du mot de passe, c'était a des fin de débugue ;) (pour ma part, je garderais qu'une notification de monter des lecteurs, le reste, je le garderais commenter pour le jours ou j'ai un problème, mais ca n'engage que moi ;) )

-en ce qui concerne la sécurité du trousseau, j'ai bien ce que tu explique sur ma virtuelle machine qui me sert a faire des tests mais sur mon MacBook pro ca ne fonctionne pas de la même façon.

peux être parce qu'il n'était pas enregistrer, je vais pousser un peu plus loin mes recherche maintenant que le script est stabiliser.

- oui tu as bien répondu a ma question

super, je vais de ce pas regarde le ménage que tu a fais dans le script et l'adapter a mon réseau.

Génial et encore un grand merci pour tous le taf.

Via

Lien vers le commentaire
Partager sur d’autres sites

  • 7 mois après...
  • 2 mois après...

Bonsoir,

Alors, pour commencer, je suis un gros noob mais ce script est exactement ce que je recherche donc je me penche dessus.

Evidement, je n'arrive pas à le faire fonctionner et je tourne en rond avec mes divers essais. Dans un premier temps, je me suis aperçu que le mot de passe ne devait pas contenir certains caractères spéciaux (">" par exemple). Une fois ce problème isolé, j'ai créé un autre user sur mon NAS pour test.

Là où je bloque sévère, c'est à cet endroit :

-- Volumes à monter et points de montage
-- item 1 : volume du NAS à monter (chemin absolu sur le NAS)
-- item 2 : chemin relatif du point de montage sur la machine sur lequel est exécuté le script (hors rootDirectory déclaré plus haut)
set volumes_to_mount to {{"/video", "/video"}, {"/video", "/tmp"}}

Je ne comprends pas les points de montages. Mon dossier est bien à la racine de mon NAS mais je ne comprends pas comment orienter ça en tenant compte de ça :

-- Répertoire racine de montage pour l'ordinateur sur lequel est exécuté le script
set root_directory to "~/Desktop"

Lorsque je lance le script dans l'éditeur AppleScript, voici le détail des événements :

tell current application
	do shell script "ping -o -t 1 192.168.1.10"
		--> "PING 192.168.1.10 (192.168.1.10): 56 data bytesr64 bytes from 192.168.1.10: icmp_seq=0 ttl=64 time=0.336 msrr--- 192.168.1.10 ping statistics ---r1 packets transmitted, 1 packets received, 0.0% packet lossrround-trip min/avg/max/stddev = 0.336/0.336/0.336/0.000 ms"
	do shell script "echo $?"
		--> "0"
	do shell script "arp 192.168.1.10 | sed -n '/11:22:33:44:55:66/='"
		--> "1"
	do shell script "security find-generic-password -g -s NAS.automount 2>&1 |  sed -n '7p'| sed 's/"acct"<blob>="//g' | sed 's/"//g' | sed -e 's/^ *//g'"
		--> "Bennybouf"
	do shell script "/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier -title "NAS automount 2.6" -message "Serveur DiskStation trouvé sur 192.168.1.10 (Utilisateur : Bennybouf)""
		--> "* Notification delivered."
	do shell script "security find-generic-password -g -s NAS.automount 2>&1 | sed -n '1p' | sed 's/password: "//g' | sed 's/"//g'"
		--> "motdepassedur"
	do shell script "/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier -title "NAS automount 2.6" -message "Serveur DiskStation trouvé sur 192.168.1.10 (Utilisateur : Bennybouf)""
		--> "* Notification delivered."
	do shell script "/bin/mkdir -p ~/Desktop/video"
		--> ""
	do shell script "/sbin/umount ~/Desktop/video"
		--> error "umount: /Users/Bennybouf/Desktop/video: not currently mounted" number 1
	do shell script "/sbin/mount_afp afp://Bennybouf:motdepassedur@192.168.1.10/video ~/Desktop/video"
		--> error "mount_afp: AFPMountURL returned error 1, errno is 3" number 1
	do shell script "/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier -title "NAS automount 2.6" -message "Mot de passe incorrect""
		--> "* Notification delivered."
end tell

Je suis sous Mac OS 10.9.2 / Terminal Notifier 1.4.2 / DSM 4.2-3248. Je teste le script directement depuis l'éditeur (fichier dans dossier "Téléchargements").

SI vous pouviez m'aider, je vous en serai méga reconnaissant ! Merci beaucoup ;-)

Lien vers le commentaire
Partager sur d’autres sites

  • 6 mois après...

À tester, car j'ai ce problème avec mon NAS en afp à domicile mais pas avec le serveur de fichiers, en afp aussi, au boulot (au boulot, pas de fenêtre surgissante au démarrage).

Du coup j'ai réfléchi, quelle différence entre ici et au boulot.

Au boulot je n'ai pas coché la case masquer (qui effectivement concerne les applis), donc ça ne viendrait pas de là.
Par contre, au boulot, dans les prefs du finder, je n'affiche pas les serveurs connectés.

J'ai testé ça et là je n'ai eu qu'une seule fenêtre qui s'est ouverte (photos) quand j'ai remonté le NAS.

C'est peut-être là la solution.

à essayer et confirmer.

Modifié par ccciolll
Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Bonjour à tous,

Je déterre ce vieux sujet, et ce qui me surprend c'est qu'il ne soit pas plus repris tellement il est utile !

J'ai un soucis, il semble que mon script n'arrive pas à accéder à ma clé dans le trousseau.

Voici mon message d'erreur :

tell current application

    do shell script "ping -o -t 1 192.168.0.49"

    do shell script "echo $?"

    do shell script "arp 192.168.0.49 | sed -n '/:11:32:53:2b:b6/='"

    do shell script "security find-generic-password -g -s NAS.automount 2>&1 |  sed -n '7p'| sed 's/\"acct\"<blob>=\"//g' | sed 's/\"//g' | sed -e 's/^ *//g'"

    do shell script "/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier -title \"NAS automount 2.6\" -message \"Serveur DiskStation trouvé sur 192.168.0.49 (Utilisateur : )\""

    do shell script "security find-generic-password -g -s NAS.automount 2>&1 | sed -n '1p' | sed 's/password: \"//g' | sed 's/\"//g'"

    do shell script "/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier -title \"NAS automount 2.6\" -message \"Serveur DiskStation trouvé sur 192.168.0.49 (Utilisateur : )\""

    do shell script "/bin/mkdir -p /Volumes/videos"

    do shell script "/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier -title \"NAS automount 2.6\" -message \"Mot de passe incorrect\""

end tell

 

Il faut bien que la clé dans le trousseau s'appelle "NAS.automount" ou "NAS.automount.(nomd'utitilisateur)"?

Idem dans le script?

Merci !

Lien vers le commentaire
Partager sur d’autres sites

  • 11 mois après...
Le 31/07/2013 à 22:30, gargaben a dit :

Re,

 

OK j'ai testé ton script et ça marche nickel. Je vais également basculer chez moi avec cette nouvelle version.

 

Quelques remarques/réponses :

- j'ai "cleané" un peu le code à partir de ta version (genre des vieux trucs que je devais faire depuis longtemps)

- j'ai cleané également un peu ton code (genre ne pas afficher le mot de passe récupéré dans le trousseau dans les messages de notification ^_^ )

- pour l'autorisation à cette clé du trousseau, pas la peine de donner les droits à toutes les applis : au premier lancement du script, OS X te demande si tu veux donner un accès permanent à cette clé au script. Si tu cliques sur OK, ça sera bon et limité au seul script (en réalité à l'utilitaire "security" si tu regardes les propriétés de la clé une fois l'autorisation permanente donnée)

- Pour ta question sur mount_afp, si tu ne donnes pas de point de montage, mount_afp te renverra une erreur car il ne saura pas où monter ton dossier réseau sur ton ordinateur local. Ais-je bien répondu ou suis-je à côté de la plaque (i.e. je n'ai peut-être pas bien compris ta question)?

 

Bon, je mets cette nouvelle version sur la page des téléchargements du forum dans la foulée de cette réponse =>

 

 

Encore merci à toi pour cette proposition d'évolution.

 

A+

Bonjour,

Merci pour le script, je vais adapter et tester chez moi.

 

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...

J'ai eu ce même problème sous sierra et high sierra et j"ai trouvé une autre solution : 

un script .sh (dans Library/LaunchDaemons) qui contient des liens symboliques ln.... vers des dossiers situés dans le compte qui se connecte au lancement du mac.

ex : #!/bin/bash
ln -s /Users/moncompte/Library/Application\ Support/Synology/Archives /Volumes/Archives 

et un autre script dans ~moncompte/library/launchagents qui effectue les montages : 

ex: #!/bin/bash
mount_AFP afp://compte:motdepasse@ipdusyno/dossiers/ /Users/moncompte/Library/Application\ Support/Synology/Archives

De cette façon, les anciens liens conservés sous la forme /Volumes/dossierssurlesyno sont "reconduits/liés" vers un autre  endroit... et ça marche bien..

Modifié par Atlantic.mac
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.