動機
TRAMPを使ってリモートサーバのファイルを編集しようと思ったときに, SSHで公開鍵認証方式でログインしようとしたら, 色々大変だったのでやり方を残す.
複数のサーバに接続する場合, ユーザ名, ホスト名(もしくはIPアドレス), 秘密鍵ファイルを組み合わせた設定を用意しておき, それを使い分けるようにしたい. elispで設定を分けることもできそうだが, 今回はPuTTY側で複数の設定を保存しておくことにした.
実行環境
- Windows 10 64bit (バージョン 1803)
- GNU Emacs 26.1 (GNU配布版:GNU Emacs download - GNU Project)
必要なもの
plinkを使ったSSH接続の手順
色々調べた結果, WindowsからSSHプロトコルでリモートサーバに接続するために, plinkを使用することにした.
plinkはPuTTYに付属して配布されているため, PuTTYをインストールする.
PuTTYは下記のリンク先から, Kentaro Sato氏のカスタムビルド版PuTTY-ranvisを使用させてもらった.
PuTTY-ranvis - Ranvis software
PuTTY-ranvisのインストール
任意のフォルダに解凍する. その後, 解凍したフォルダへパスを通しておく.
今回は環境変数PATHにフォルダを追加し, コマンドプロンプトからplinkが実行できることを確認した.
PuTTYでのセッション登録
EmacsのTRAMPで接続先を選択するために, PuTTYで登録したセッション名を指定する.
そのため, 予めPuTTYでセッションを登録しておく.
設定しておくパラメータは下記の通りで, ここでホスト名, ユーザ名, 秘密鍵の組み合わせを保持する形になる.
- セッション - 接続先の指定 - ホスト名 にホスト名かIPアドレスを入れる.
- 接続 - データ - ログインの詳細 - 自動ログインのユーザ名 にユーザ名を入れる.
- 接続 - SSH - PuTTYツール間で SSH 接続を共有する - 可能ならば SSH 接続を共有する にチェックを入れる.
- 接続 - SSH - 認証 - 認証パラメータ - 認証のための秘密鍵ファイル にPuTTY形式の秘密鍵のパスを入力する.
- セッション - 保存済みセッション一覧 に, 名称をつけて保存する. この名称をあとでEmacsで指定する.
なお, 公開鍵/秘密鍵はputtygen.exeで作れる. 作成方法やサーバへの登録はここでは割愛する.
PuTTYでのSSH接続
PuTTYを実行し, 上記で登録したセッションを開いておく.
Emacs上での設定
plinkがEmacsから参照できるようになっている必要がある.
今回は環境変数PATHにplinkまでのパスを登録しているので, Emacs側では特に設定は不要.
もし上手く認識されないようであれば, *scratch*
バッファで下記を評価し, パスが含まれてるかを確認する.
(getenv "PATH")
Emacs上での操作
Emacs上で下記のように入力し, リモートサーバのファイルが開ければ成功.
C-x C-f /plinkx:session-name:/directory/file
注意点は, plinkではなくplinkxを使用すること.
そして, ここでsession-nameと記載した部分には, PuTTYで登録したセッション名を指定する.