Bequeme ssfs-Mounts in zsh (Linux, OSX)

Im Rahmen meiner Arbeit, aber auch bei Zugriff auf Fileebene auf meine Websiteprojekte, setze ich auf eine umfangreiche .ssh/config-Datei, in der ich für jeden SSH-Login einen Kurznamen definiere:

Host bla
  Username x92762361
  ForwardAgent yes
  Hostname hosted.someprovider.net
...

Diese bei „Host“ angegebenen Kurznamen kann man sowohl für „ssh“, „scp“, als auch für Mounts per „sshfs“ verwenden:

ssh bla
scp archive.tgz bla:files/
sshfs bla: /mnt/bla

Das geht witzigerweise auch für „Hosts in Hosts“, also etwa KVM-Clients:

Host redmine
  User redmine
  Hostname prosystem413
  ForwardAgent yes
  ProxyCommand ssh -q -a -x myuser@otherhost nc %h 22
...

Mein neuster Hack dabei sind drei ZSH-Functions (in .zshrc), die mir das lokale Mounten von Remote-Filesystemen erheblich erleichtern. Dazu habe ich mir als Kommandonamen „mox“ (mount external) bzw. „umox“ ausgedacht:

function mox()
{
   MOUNTPOINT="$HOME/extern/$1"
   if [ ! -d "$MOUNTPOINT" ]; then
      mkdir "$MOUNTPOINT"
   fi
   sshfs "$1:" "$MOUNTPOINT"
   cd "$MOUNTPOINT"
}

function umox()
{
   fusermount -u "$HOME/extern/$1"
}

function moxpoints
{
   reply=(`grep 'Host ' ~/.ssh/config | awk '{print $2}'`)
}

function umoxpoints
{
   reply=(`mount | grep "$HOME/extern" | awk -F: '{print $1}'`)
}

compctl -K moxpoints mox
compctl -K umoxpoints umox

„moxpoints“ dient der Completion, d.h. „mox redTAB“ würde mir das zu „mox redmine“ completen. Ähnlich bei „umox“ zum fuse-umounten des sshfs-Mounts: hier suche ich in der Ausgabe von „mount“ nach passenden gemounteten Mountpoints.

Unoptimal ist noch, dass ich nicht Unterverzeichnisse im Remotefilesystem als Basisverzeichnis für sshfs angeben kann. Hierzu müsste man irgendwelche speziellen Kommentare in der „.ssh/config“ einbauen, nur reicht dann nicht mehr ein Grep zur Ermittlung der Hosts. Die Praxis hat aber gezeigt, dass man auch ohne tiefe Remotemountdirs auskommt.

Unter OSX (zsh, fuse, sshfs per homebrew installieren) funktioniert „mox“ auch prima. Leider zeigt der Finder dort aber nicht die Namen der Mountverzeichnisse an. Da verliert man schnell die Übersicht. Außerdem braucht OSX spezielle Optionen, um die Remoteuser auf den lokalen User zu mappen. Die .zshrc wäre dann anzupassen.

Ich gehe davon aus, dass man mox/umox mit Completion auch in bash realisieren kann. Aber wer nutzt schon bash? :-)