Come faccio a montare sshfs all'avvio?

Utilizzando una casella NAS come 24/7 file server, vorrei utilizzare sshfs per connettersi ad esso da un desktop di Ubuntu 9.04. Attualmente, ho questa linea nel fstab del desktop:

sshfs#jldugger@storage:/mnt/HD_a2/ /mnt/storage fuse comment=sshfs,auto,users,exec,uid=1000,gid=1000,allow_other,reconnect,transform_symlinks,BatchMode=yes,fsname=sshfs#jldugger@storage/mnt/HD_a2/ 0 0 

Posso confermare che funziona con mount /mnt/storage . Quello che mi serve è un metodo per montarlo all'avvio, ma dopo che la connessione di networking è stabilita.

  • Come impostare l'interface di networking per avere eth0 come dhcp e eth0: 1 come ip statico?
  • Le migliori pratiche per l'immissione dei certificati SSL da utilizzare in Apache 2?
  • ulimit -n non cambia - valori limiti.conf non ha effetto
  • Come fai a sapere se l'installazione di Apache è protetta?
  • Può dpkg verificare i file da un pacchetto installato?
  • Come fa un VM ospitato su xen sa che è in un ambiente virtualizzato
  • Posso spostare la directory di Windows su un'altra unità?
  • Tutti i messaggi di avvio di Debian
  • Spostamento della partizione di sistema di avvio di Windows 2003
  • Ospiti KVM non avvio
  • È necessario disporre di un modo per eseguire uno script durante l'avvio di Windows prima di accedere a un utente
  • Server 2008 R2 richiede 2 dischi da avviare
  • 5 Solutions collect form web for “Come faccio a montare sshfs all'avvio?”

    Attualmente, Upstart in Ubuntu non genera events di networking. Invece chiama tradizionale sysvinit. Per impostazione predefinita NetworkManager è installato e in esecuzione; piuttosto che emettere events di networking per upstart, contiene un dispatcher di run-parts (/etc/NetworkManager/dispatcher.d/) che si basa semplicemente sul dispatcher di run-parts di ifupdown (/etc/network/*.d/). In particolare si preoccupa di /etc/network/if-up.d/ e /etc/network/if-down.d/

    Per prima cosa impostare un pacchetto di chiavi ssh non crittografato, in modo da poter montare il punto senza un prompt. Scrivere uno script, inserirlo in /etc/network/if-up.d/ e eseguire l'esecuzione. Il seguente è stato scoperto su UbuntuForums ed è stato sufficiente per me:

     #!/bin/sh ## http://ubuntuforums.org/showthread.php?t=430312 ## The script will attempt to mount any fstab entry with an option ## "...,comment=$SELECTED_STRING,..." ## Use this to select specific sshfs mounts rather than all of them. SELECTED_STRING="sshfs" # Not for loopback [ "$IFACE" != "lo" ] || exit 0 ## define a number of useful functions ## returns true if input contains nothing but the digits 0-9, false otherwise ## so realy, more like isa_positive_integer isa_number () { ! echo $1 | egrep -q '[^0-9]' return $? } ## returns true if the given uid or username is that of the current user am_i () { [ "$1" = "`id -u`" ] || [ "$1" = "`id -un`" ] } ## takes a username or uid and finds it in /etc/passwd ## echoes the name and returns true on success ## echoes nothing and returns false on failure user_from_uid () { if isa_number "$1" then # look for the corresponding name in /etc/passwd local IFS=":" while read name x uid the_rest do if [ "$1" = "$uid" ] then echo "$name" return 0 fi done </etc/passwd else # look for the username in /etc/passwd if grep -q "^${1}:" /etc/passwd then echo "$1" return 0 fi fi # if nothing was found, return false return 1 } ## Parses a string of comma-separated fstab options and finds out the ## username/uid assigned within them. ## echoes the found username/uid and returns true if found ## echoes "root" and returns false if none found uid_from_fs_opts () { local uid=`echo $1 | egrep -o 'uid=[^,]+'` if [ -z "$uid" ]; then # no uid was specified, so default is root echo "root" return 1 else # delete the "uid=" at the beginning uid_length=`expr length $uid - 3` uid=`expr substr $uid 5 $uid_length` echo $uid return 0 fi } # unmount all shares first sh "/etc/network/if-down.d/umountsshfs" while read fs mp type opts dump pass extra do # check validity of line if [ -z "$pass" -o -n "$extra" -o "`expr substr ${fs}x 1 1`" = "#" ]; then # line is invalid or a comment, so skip it continue # check if the line is a selected line elif echo $opts | grep -q "comment=$SELECTED_STRING"; then # get the uid of the mount mp_uid=`uid_from_fs_opts $opts` if am_i "$mp_uid"; then # current user owns the mount, so mount it normally { sh -c "mount $mp" && echo "$mp mounted as current user (`id -un`)" || echo "$mp failed to mount as current user (`id -un`)"; } & elif am_i root; then # running as root, so sudo mount as user if isa_number "$mp_uid"; then # sudo wants a "#" sign icon front of a numbersc uid mp_uid="#$mp_uid" fi { sudo -u "$mp_uid" sh -c "mount $mp" && echo "$mp mounted as $mp_uid" || echo "$mp failed to mount as $mp_uid"; } & else # otherwise, don't try to mount another user's mount point echo "Not attempting to mount $mp as other user $mp_uid" : echo "Not attempting to mount $mp as other user $mp_uid" fi fi # if not an sshfs line, do nothing done </etc/fstab wait 

    Se hai una connessione wifi o altrimenti inaffidabile, inserisci quanto segue in /etc/network/if-down.d/:

     #!/bin/bash # Not for loopback! [ "$IFACE" != "lo" ] || exit 0 # comment this for testing exec 1>/dev/null # squelch output for non-interactive # umount all sshfs mounts mounted=`grep 'fuse.sshfs\|sshfs#' /etc/mtab | awk '{ print $2 }'` [ -n "$mounted" ] && { for mount in $mounted; do umount -l $mount; done; } 

    Upstart è il metodo preferito per il rilascio degli script di avvio o dei servizi in Ubuntu ora, anche se l'editing /etc/rc.local funziona ancora. Upstart consente di controllare quando il servizio viene eseguito assicurandosi che accada dopo aver avviato la connessione di networking.

    È anche ansible modificare direttamente i simboli in /etc/rc.Xd (sostituire X per il livello di esecuzione utilizzato) e aggiungere un nome come S99mount per assicurarsi che sia eseguito dopo l'impostazione della networking. Questo dovrà indicare un file di script che monta gli sshfs che stai richiedendo.

    _netdev come opzione di assembly dovrebbe risolvere questo, credo

    Solo un pensiero, ma se lo utilizzi come file server, forse NFS o Samba sarebbe una soluzione migliore di ssh.

    Ecco un'altra soluzione nel caso in cui non si dispone di un certificato dall'host remoto e deve invece utilizzare un login / password. Sto usando in questo esempio lo stesso nome utente e le directory utilizzate da jldugger per evitare di aggiungere confusione.

    1. Crea un file contenente la tua password nella tua home directory e protegga:

       echo 'YourRemoteUserPassword' > ~jldugger/.credentials chmod 600 ~jldugger/.credentials 
    2. Modifica il tuo file /etc/rc.local e inserisci il seguente command nella parte inferiore, ma prima di "exit 0":

       sshfs -o password_stdin -o nonempty jldugger@storage:/mnt/HD_a2/ /mnt/storage < ~jldugger/.credentials 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.