そういえばsshfsが便利な件

以前はリモートのファイル編集するのにEmacsTRAMP使ってたんですが、sshfsの方がシェルでcdとかlsできるし、Emacsでoccurとかもできるしいいよねってんで最近はsshfs使ってます。

で、sshfsしたいホストが多いといろいろめんどくなるんで、↓みたいなヘルパスクリプト書いて使ってましたよって話です。


マウントポイントをまとめておくディレクトリ(~/r/とか)の下に、予めsshfsするリモートホストの名前のディレクトリを作っておきます。sshするときユーザー名が必要なホストはUSERNAME@HOSTNAMEでmkdirしときます。

$ cd ~/r/
$ mkdir host1
$ mkdir foo@host2


あとは末尾のヘルパスクリプトで、sshfsでマウントしたり、sshfsなマウントポイントの一覧を見たり、アンマウントしたりできます。

$ ./m host1
Filesystem               Size  Used Avail Use% Mounted on
host1:/                 1000G     0 1000G   0% /home/hirose31/r/host1
foo@host2:/             1000G     0 1000G   0% /home/hirose31/r/foo@host2

$ ./l
Filesystem               Size  Used Avail Use% Mounted on
host1:/                 1000G     0 1000G   0% /home/hirose31/r/host1
foo@host2:/             1000G     0 1000G   0% /home/hirose31/r/foo@host2

$ ./u host1
Filesystem               Size  Used Avail Use% Mounted on
foo@host2:/             1000G     0 1000G   0% /home/hirose31/r/foo@host2

特に異国のサーバーだと、git絡み(シェルプロンプトにgitのステータス出すようにしてたりとかEmacsのVC-gitとか)が遅いですけどsshfsは便利ですねー


#!/bin/bash
# m
usage() { echo "[usage] ./m hostname"; exit 1; }
[ $# -eq 1 ] || usage

rhost=${1%/}
[ -d "$rhost" ] || mkdir "$rhost"
sshfs \
  -o cache_timeout=3 \
  -o transform_symlinks \
  -o workaround=rename \
  -o ssh_command=ssh4sshfs \
  $rhost:/ $rhost \
    ;
df -t fuse.sshfs -h
#!/bin/sh
# l
df -t fuse.sshfs -h
#!/bin/bash
# u
usage() { echo "[usage] ./u hostname"; df -t fuse.sshfs -h; exit 1; }
[ $# -eq 1 ] || usage

rhost=${1%/}
[ -d "$rhost" ] || { echo "$rhost: no such directory"; usage; }
fusermount -u $rhost && echo success || echo failed
df -t fuse.sshfs -h
#!/bin/sh
# ~/bin/ssh4sshfs
exec ssh -o ControlPath=none -C -c arcfour128,arcfour256,arcfour,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc "$@"