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と相性が悪いのが難点だけど、大変便利に使ってる。