今回は Emacs の Trampという機能についてです。これを使えば使いなれたローカルのEmacs 環境からリモートのファイルを直接編集できます!
リモート上のファイルをローカルの Emacs で編集したい
リモートで他のマシン上のファイルを編集をするとき、どのようにしていますでしょうか?例えば下記の2つの方法が考えられますね。
- sshでリモートにログインして、そのマシン上で編集する
ftpやscpで編集したいファイルをローカルへ落としてきて編集した後、ftp,scpなどでリモートマシンへ転送
前者は直接的な方法ですが、例えば Emacsが普段使用してない設定だったりで何かと面倒です。
数行変える程度なら我慢できますが、使い慣れていない設定のEmacs はストレスが溜まります。
C-hでヘルプが出てきたりしたら殺意すらおぼえますね。
vi ? nano? 起動したら最後、終了させることもママなりません。
後者は使いなれたローカルの環境で編集できるというメリットがありますが、いちいちリモートからファイルを落としてきたりアップしたりとするのが面倒です。
うっかりするとそのうちローカルとリモートと、どちらが最新のファイルかわからなくなったりします。
Emacs Tramp を使おう
そこで Emacs の Tramp機能の出番です!使い方は至極簡単です。いつも通りC-x C-fでファイルを開くときに、
| |
とするだけです。これでローカルの Emacs上から直接リモートのファイルを編集できます! もちろんリモートマシンのホスト名のところはIPアドレスでも OK です。
ファイル名のところは ~/hoge.cのようにホームディレクトリからの相対パスも使えます。
また、リモート上のファイルの場所を覚えていない場合、ファイル名を指定せずにディレクトリ名だけ指定すればdired が開きますので、そこからファイルを選択すれば OKです。
例えばユーザ名が tarou ホスト名が remotehost で、ホームディレクトリを diredで開く場合は下記のようにします。
| |
下記のようにすればホームディレクトリ直下のhoge.cが直接開きます。
| |
また、 ssh の config設定がしてあればもっと便利です。たとえば下記のように設定しておいたとします。
| |
これならいちいち/ssh:hangstuck@svNNNNN.xserver.jp:~/.bashrcとせずとも/ssh:xserver:~/.bashrcでアクセスできます。便利。
Windows の場合の注意点
ただし Windows
環境の場合は注意が必要です。Windows の場合は ssh ではTrampが動作しません。ここでは2つの方法を紹介します。
sshx を使う
以前は Windowsでは PuTTY/Plink が一般的でしたが、いまはWindows標準のsshx が使えます。
PuTTY/Plinkインストールするのがめんどくさい、Windowsの機能だけでTrampを使いたいひとはsshxがおすすめです。
ただし制限としてパスワードでのログインができません。 SSH鍵でのログインになります。公式のマニュアルにも 「Note that sshx does not bypass authentication questions.」と記載があります。
念のため、鍵の生成の方法を書いておきます。すでに作成済みなら飛ばしてOKです。
サーバ側にて ssh-keygen コマンドで作成します。下記では暗号方式に RSA を指定しています。
途中でパスフレーズを聞かれますがよくわからなければ空のままでも作成できます。
鍵は~/.ssh/ ディレクトリ以下に作られます。
id_rsaが秘密鍵、id_rsa.pubが公開鍵です。
| |
公開鍵をauthorized_keysに追加します。これでサーバ側の設定はOKです。
| |
次にクライアント側のWindowsの設定です。先程サーバで作成した秘密鍵 id_rsaを C:\Users\username\.ssh\ に置きます。
usernameのところはご自身のユーザ名に置き換えてください。
次に ssh-agentエージェントサービスを起動させます。まずサービスの管理画面を開きます。
「スタートメニュー」→「Windows管理ツール」→「サービス」とたどってください。
すると下記のようなウィンドウが開きます。その中から「OpenSSH Authentication Agent」 を探してください。

「OpenSSH Authentication Agent」を見つけたらそれを右クリックして「プロパティ」を選択してください。すると下記のウィンドウが開きます。 そこで「全般タブ」の「スタートアップの種類」を「自動」に設定しOKをクリックしてください。

再度「OpenSSH Authentication Agent」を探して右クリックし「開始」をクリックしてください。下図を参考にしてください。
これでssh-agent エージェントが使えるようになります。

次に PowerShell を起動してください。そして下記のように ssh-add に秘密鍵を渡してください。 これで鍵でSSHにログインできるようになりました。
| |
ここで一度SSHでパスワード無しでログインできるか確認してください。
これをやらないとなぜかTrampがこけます。一度だけ、明示的にssh.exe でログインしておいてください
| |
これで準備は完了です。下記のように sshx でTrampが使えるようになっているはずです。
| |
PuTTY/Plink を使う
以前から Windows でよく使われるSSHクライアントといえばPuTTYがあります。
そのコマンドラインインタフェースのPlinkを使えばEmacs Tramp が動作します。
plink はputtyをインストールすれば使えるようになります。
PATHを通しておくのを忘れずに。
| |
最初が違うだけですね。あとは ssh のときと同様です。
ssh のポート番号がデフォルトの22でない場合
基本的にこれで事足りるかと思いますが、時々、sshのポートがデフォルトの22でないマシンがあります。
セキュリティ上、あえてデフォルトから変えているわけですね。
例えば今現在わたしが使っているエックスサーバー(xserver) はポート番号は22でなく10022です。こういう場合、ポート番号を明示的に指定してあげる必要があります。その方法は下記の通りです。
| |
ホスト名の後にポート番号を書きます。例えばsshのポート番号が10022の場合は下記のようになります。
| |
rootでファイルを開きたい場合
普通に一般ユーザでファイルを開く方法は上記に述べた通りです。ですがroot権限でファイルを開きたいときがありますよね? その場合の方法を下記に書きます。やり方は簡単で、パイプでsudoに渡すだけです。
| |
まとめ
Emacs Trampを使って、ローカルから直接リモート上のファイルを編集する方法をご紹介しました。 ザクッとポイントをまとめると下記の通りです。簡単。
C-x C-fのときにちょっとだけファイルの指定方法を変えるだけ- Windows の場合は
sshでなくsshxかplinkを使う - sshポート番号がデフォルト22でない場合は「#」でポート番号を指定
- root でファイルを開くときはパイプで\sudo\する
以上、Emacs Tramp についでした。
Note
オートセーブの設定によっては動作が重い場合があるので、その解決法をWindows & Emacs Tramp でオートセーブに失敗するときの対処法に記載しました!