Emacsではtrampという、リモートのファイルやディレクトリをあたかもローカルにあるように扱うことができる拡張が標準で備えられてる。
これは少し過去の情報だが、基本的にはこの通りだし、多段ssh、なかでもsudoを途中で挟む多段sshについて言及されているのでとても良い記事だと思う。そこで、自分への忘備録も兼ねて、使い方や補足をしたいと思う。ちなみに、環境としてはCocoaEmacs v24.3を想定しているが、Emacs v23以降だったら大体変わらないと思う。
HOW TO USE
最初から入ってるので.emacsに
(require 'tramp)
(setq tramp-default-method "ssh")
するだけ。あとはホントにC-xC-f /user@hoge.com:~/fuga.txtとかすると使える。anythingやhelmとも連携することができるし、recentfの設定にもよるけどパスを打つこと無く履歴から開くこともできる。ただ、helm越しだと現状いくつか問題があるので注意が必要(helm-for-filesでエラーが起きたり、tramp上現在ディレクトリをソースに含めると重くなる)。
注意点は普通find-file(C-xC-f)したときって、プロンプトが~/ってなってると思うんだけど、これを/にした上でサーバ名を書き始めること。最初の何もわかってなかった頃これを間違えて悩んでたときあった。
で、しかもtrampはしっかりと~/.ssh/configまで読んでくれてるようなので、実は特別な設定をしないでも~/.ssh/configの方で設定が済んでいればホスト名などを省略して書くことができる。素晴らしい。
多段ssh
多段sshも~/.ssh/configの設定がしてあれば難なくできるはずだけど、個人的に一つ重宝している機能があって、sshの途中でsudoを挟めることがとても良い。以下にサンプルをのせてみる。
tramp-default-proxies-alistに("host" "user" "method")を設定してtrampを実行した場合、methodで記述した方法で一旦接続した後にuser@hostに接続を行う1。これを利用して一段目のサーバでsudoしてrootとして二段目のサーバにログインできているのがポイント高い。
んでこの二段目のサーバに入るときにプロンプトからパスワードを要求されるので一段目でsudoするときのパスを入力すれば一気に三段目でも四段目でもファイルやディレクトリを開くことができる。
おわりに
このEmacsのtrampがあるからCocoaEmacsを使ってると行っても過言ではない。perl-completion.elやkey-combo.elなどの一部のelispと相性が悪いのが難点だけど、大変便利に使ってる。