ブログトップ 記事一覧 ログイン 無料ブログ開設

高原芳浩のKeep-Alive このページをアンテナに追加 RSSフィード

2006-11-27

[]Emacsでリモートサーバ上のファイルをrootで編集する

ちゃんとマニュアルは読もうね!という話。

Emacsでリモートサーバのファイルを直接編集するtrampは多くのサーバを同時に扱う仕事にはとても重宝する。

使い方は簡単で、C-xC-fでファイルを開く時に/ssh:user@host:/path/toのようなファイル名を使う事で自動的にsshリモートホストにログインしてファイルを開く。また、このバッファでファイルを変更して保存するとリモートホストにファイルをコピーするのであたかもローカルのファイルのようにリモートのファイルを扱う事ができる。

また、trampをつかうことでローカルホストのファイルをroot権限で扱うこともできる。たとえば、/sudo:root@localhost:/etc/passwdなどのような名前でEmacsからファイルを開く事で/etc/passwdというファイル名をroot権限で扱う事ができる。いつも使っている扱い慣れたEmacsを使えるのはとても快適。

ところで、長年恩恵をうけているtrampにも実はずっと不満があった。それは、リモートサーバ上のファイルをroot権限で編集ができないという事。リモートサーバではもちろんrootでのsshアクセスなんてものは許可していない*1のでroot権限で保存されたファイルを修正するには、ユーザ権限でログイン後sudoを使ってrootに昇格する必要がある。つまり/ssh:〜でつないだ後に/sudo:〜でファイルを開くような事をしたかったのだ。

これまで私は、マニュアルもろくに読まずtrampを使ってきたのでtrampではこのような事ができないとずっと思い込んできた。ところが本日会社で「trampでsshとsudo同時にできたらいいのに」とぼやいていたら「できますよ!」と返事が返ってきた。焦ってマニュアルを読んでみるとtrampでは複数のメソッドを同時に使うための枠組みが用意されていた。利用方法は簡単でファイル名の先頭に/multi:をつけるだけ。例えば、/multi:ssh:user@example.com:sudo:root@localhost:/etc/passwdとするだけで、example.comにuserアカウントでログイン後、rootにsudoして/etc/passwdを開く事ができる。

ちなみに、trampを使って開いたファイルはEmacs上では普通のファイルと何ら変わらなく扱う事ができる。Dirdモードも利用できるしRCS psvnあたりも問題なく使える。特にRCSはサーバの設定ファイルを変更する時に欠かせない(いまだに日付をつけてhttpd.conf.20010304のように保存している人はいないよね?)。

手間のかかる作業が一つ減ってちょっと嬉しい。

*1:あぶないから

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。