以前はリモートのファイル編集するのにEmacsでTRAMP使ってたんですが、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 "$@"