最近の変更サイトマップ

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やらのインストール方法は割愛。

plink.exeとmsysへのパスを通す

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

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

Emacsのshellでbashが使えるようにする

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

plinkでサーバにSSH接続する

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
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0