2013年1月16日水曜日

SSH(Tramp) on NTEmacs24.2

SSH(Tramp) on NTEmacs24.2 WindowsでGUIのEmacsからsshを満足して使うのに少々時間がかかった。せっかくなのでメモを残しておく。

概要

Emacsやtrampについて解説しているサイトやブログを走り回った挙句、Cygwinからopensshとwin-ssh-askpassを使う方法に落ち着いた。Windows7-64bit で、NTEmacs24.2(WindowsのためにビルドされたEmacs)のsshを使う。必要なツールは次の3つである。
  • Cygwin1.7
  • 「WindowsでLinuxのような環境を提供するツール群」
    setup.exeがインストーラ。
  • NTEmacs24.2
  • GNUのミラーサイトの1つがこちら
  • win-ssh-askpass
  • GANA氏による「cygwin の openssh の ssh-agent をよりスマートに利用」するためのツールwin-ssh-agentに付随するプログラム。同氏のブログから win-ssh-agent.tgz をダウンロードする。

導入

  1. Cygwinのsetup.exeを実行
  2. ダイアログを適当に進め、インストールするパッケージを選択する。Defaultのパッケージに加えてopensshのパッケージを選択し、インストールする。少し時間がかかる。
  3. emacs-24.2-bin-i386.zipを適当に展開
  4. 展開したらrunemacs.exeを実行すればすぐに使える。
  5. win-ssh-agent.tgzを適当に展開、インストール
  6. Cygwin Terminalからtarコマンドを使うなどして適当なディレクトリに展開する(下のコマンドではwin-ssh-agentを作ってそこに展開する)。
    $ tar zxvf win-ssh-agent.tgz
    win-ssh-agent内のwin-ssh-agent.exeとwin-ssh-askpass.exeのファイル名から"win-"を除いて/usr/sbin/にコピーする。
  7. .emacsにtrampの設定を記述
  8. リモートのファイルを編集するためのパッケージであるtrampはEmacs24.2に元々含まれている。Emacsがtrampを使うときの設定に関する以下の記述を、Emacsの設定ファイルである.emacsに追加する。
    (setq-default tramp-default-method "sshx")
    sshxを使うことになる。

使用

Cygwin Terminalからrunemacs.exeを実行する。
$ [Emacsの展開先]/bin/runemacs.exe
通常のsshでは、ファイルを読み込むコマンド
Ctrl-x Ctrl-f
の後、普通はミニバッファに
/ssh:username@host:remotefile
などと入力するが、ここではsshxを使うので、
/sshx:username@host:remotefile
と入力する。そしてパスワードはミニバッファではなくwin-ssh-askpassのダイアログで入力する。そのホストに初めてアクセスするときはフィンガープリントの確認を求められ、ホストを承認するかどうかyes/noで答える。ウィンドウが小さくてフィンガープリントが見えないときは"The authenticity of host ..."の行をクリックして右矢印キーを押すとメッセージの続きが見える。
パスワードを入力する。
これでめでたくリモートファイルを編集できるはずだ。

補足(起こり得るエラー)

  • opening connection...
  • パスワードを入力した後に"opening connection"のまま固まってしまったときはsshが複数起動している可能性があるので
    Meta-x tramp-cleanup-all-connection
    で接続をリセットしたり、余分なバッファを消したりするか、WindowsのタスクマネージャやCygwin Terminalからsshを終了する。他の異常があるときもまずはとりあえず接続をリセットしてもう1度接続し直す。
  • Couldn't find exit status...
  • Solaris など一部のサーバに接続すると、"Couldn't find exit status"というエラーが発生して接続できないことがある。これについては参考に示したnishikawasasaki氏のブログの「Solarisとの戦い」を参照されたい。

参考