Windows 10のEmacs 26.1でplinkを使ってSSHターミナル接続する

SSHでTRAMPする方法じゃないです。いわゆるふつーのSSHの方です。

  • Windows 10 Pro. バージョン1803
  • IMEパッチ適用済みEmacs 26.1 (いわゆるNTEmacs)
    • 25.3でも動作確認済み
  • PuTTY (64bit) Release 0.70
  • msys 2013072300
    • bash 3.1.23-1-msys-1.0.18

PuTTYやらmsysやらのインストール方法は割愛。

WindowsのPATH環境変数に以下のパスを追加する。もちろん、パス情報は各人の環境に読み替えてくだしあ。

  • C:\Program Files\PuTTY
  • C:\MinGW\msys\1.0\bin

init.elにシェルの設定を追加する

(setq explicit-shell-file-name "C:/MinGW/msys/1.0/bin/bash.exe")
(setq shell-file-name "C:/MinGW/msys/1.0/bin/bash.exe")

M-x shellでbashが起動すればおk

emacsのshellで plink -ssh -t USER@HOST とすると、サーバにSSH接続ができる。

パスワードなどの入力要求は自動的にミニバッファでの入力になるのが素敵。

ログインに成功すれば、いつも通りのSSHターミナルとして使える。ファイル名のTAB補間が効かないけど…。

プロンプトが二重に出る問題

shell上でプロンプトが二重に出ることがあるが、接続先から送られてくるプロンプト情報にemacsのshellで解釈できないシーケンスが入っているのが原因である。

接続先のログインシェルやシェルの設定に依存するため、確実な対応策はないのだが、とりあえずTERM変数をてきとーに指定してシェルを起動するようにすれば大体おk。

plink -ssh -t USER@HOST "env 'TERM=emacs' /bin/bash"

実行したコマンドがそのまま表示される問題

上図をよく見ると、プロンプトのls -alの後にもls -alが出てしまっている。リモートシェル側のローカルエコーがらみの問題のようなので、ログインした状態でstty -echoとすれば出なくなる。

毎度設定するのが面倒なら.bashrcあたりに書いてもいいが、ローカル端末や他のターミナルエミュレータから接続したときに問題が出る可能性があるので、TERM変数に応じて分岐させた方が良いだろう。

  • emacs/emacs26.1_use_ssh_terminal_with_plink_on_windows10.txt
  • 最終更新: 2018-06-07 11:59
  • by Decomo