TRAMPなるリモートのものも透過的に扱えるようにしてくれるすばらしいソフトがあるらしい。TRAMPの日本語マニュアル
で、これをemacsから使えるelispがあるらしいと本で見つけ、早速つかってみた。
最近のemacs23.4.1では標準でそのelispが入ってる模様で私の環境ではそのままうごいた。日本語解説ページ
##使い方
###基本的な使い方
C-x C-fでファイルを開くときに
/ssh:username@hostname:path/to/file
こうしてやればリモートのファイルを開くことができる。
また、リモートファイルのパスを指定せずにhostname後の:でRETをおしてDiredを表示することもできる。
また、.ssh/configの設定がそのまま反映さえるのでaliasを設定してあったりするとかなり楽めに開ける。
基本的な使い方は以上。
###一般ユーザでしかログインできないサーバーでroot権限でファイルを編集する方法。
リモートのサーバーがrootでのログインを許可してない場合、このままでは利用することができない。どうしたら、sshでログイン後root権限でファイルを編集できるようになるだろうか?
いくつかの前のバージョンまで多段階にプロトコルをチェーンできるmultiプロトコルが使えたらしいが、使おうとするとdepricatedになったよとメッセージがでて使えない。
tramp-default-proxies-alist に (HOST USER PROXY) というエントリを追加する.こいつは,USER@HOST にあるファイルにアクセスするには PROXY を経由しろということを意味する.
(add-to-list 'tramp-default-proxies-alist
'("host1" "user2" "/ssh:user1@host1:"))
しかし、この方法だと複数のサーバーを扱っているとすべてのものに対してエントリを書かなければならなくなりかなり面倒になってしまう。
そこで以下の様にしてやると汎用的に使えるようにできる。
(add-to-list 'tramp-default-proxies-alist
'(nil "\\`root\\'" "/ssh:%h:"))
(add-to-list 'tramp-default-proxies-alist
'("localhost" nil nil))
(add-to-list 'tramp-default-proxies-alist
'((regexp-quote (system-name)) nil nil))
これで
/sudo:hostnameとすることでリモートでログインできるようになる。