Queste istruzioni presumono che tu stia utilizzando un file sparsebundle in 10.9 perché utilizzi un'unità crittografata. In caso contrario, modificare di conseguenza.
Per prima cosa, segui le istruzioni nel link sottostante per capire come usare security find-generic-password
per estrarre la password dall'unità crittografata dal tuo Portachiavi a livello di codice.
link
Quindi crea un file chiamato mounter
nella directory bin locale ~/bin
che contiene il seguente codice (sostituisci tutti i percorsi con i tuoi percorsi e in security find-generic-password
, usa il nome della chiave in Keychain):
#!/usr/bin/env bash -e
PHYSICAL_DRIVE_PATH="/Volumes/Backup/"
SPARSEBUNDLE_PATH="/Volumes/Backup/TimeMachine.sparsebundle"
SPARSEBUNDLE_MOUNT_PATH="/Volumes/Time Machine/"
# Check existing states
if [ -e "$SPARSEBUNDLE_MOUNT_PATH" ]; then
echo "Already mounted."
exit 0
fi
if [ ! -e "$PHYSICAL_DRIVE_PATH" ]; then
echo "Physical drive not attached"
exit 0
fi
if [ ! -e "$SPARSEBUNDLE_PATH" ]; then
echo "Virtual drive not found on physical drive"
exit 1
fi
# The mount command uses security find-generic-password
# to get the password from the keychain store
MOUNT_PASSWORD=$(security find-generic-password -w -D "disk image password" -l TimeMachine.sparsebundle)
printf $MOUNT_PASSWORD | hdiutil attach -stdinpass -mountpoint "$SPARSEBUNDLE_MOUNT_PATH" "$SPARSEBUNDLE_PATH"
Questo è un po 'prolisso, ma non significa memorizzare password ovunque ma portachiavi. In ogni caso, ora dobbiamo farlo funzionare. Crea un file in ~/Library/LaunchAgents/
come ~/Library/LaunchAgents/com.martorana.dave.mounter.plist
e inserisci il seguente codice, sostituendo, ovviamente, i percorsi con i tuoi percorsi:
<?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.martoranas.dave.mounter</string>
<key>Program</key>
<string>/Users/dave/bin/mounter</string>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>60</integer>
<key>StandardOutPath</key>
<string>/Users/dave/bin/ldout.log</string>
<key>StandardErrorPath</key>
<string>/Users/dave/bin/lderr.log</string>
</dict>
</plist>
Stiamo utilizzando launchd
anziché cron
per una serie di motivi, il più importante dei quali è l'accesso al tuo portachiavi.
Ora carica il tuo demone di avvio:
launchctl load -w ~/Library/LaunchAgents/com.martoranas.dave.mounter.plist
E quello dovrebbe farlo Ora launchd
eseguirà lo script della shell ogni 60 secondi e, se non montato e disponibile, verrà montata l'immagine del disco sparsebundle
.
Saluti,
Dave