この記事は?
tramp-modeのお話ではありません
NTEmacsの*shell*からsshでサーバにログインしコマンドをバシバシ打つためのものです
makeのためだけにTeraTerm使うのが癪だったので調べました
結論から申し上げますと plink+ssh-mode でいけますよというお話
M$のOpenSSHをcmdproxyから使うと上手くいかない
NTEmacsでM-x shell
すると起動するcmdpoxy.exe
普通のcmd上でM$のOpenSSHClient使って繋がるの確認したのに
cmdproxy経由だと以下のようなエラーで上手くいかない
Pseudo-terminal will not be allocated because stdin is not a terminal.
このエラーは仮想端末ptyが無いよーと言っているらしく
回避方法としてfakecygpty
を使うとcygwinのptyを通してコマンドを実行できる
詳細は Ssh With NTEmacs#EmacsWiki
ただ、このfakecygpty
、windows7の時は動いていたのにwindows10で上手く動かない
脱fakecygpty
fakecygpty
が無ければ使わなければいいじゃない
ということで他のsshクライアントを試したところ
plink
を使うと*shell*上で使ってもokなことがわかった
ちなみにplink
はputty
に付いてくる
sshの機能単体のCUIプログラムです
putty
は適当にDLしてください
plink
, psftp
とかがインストールされると思います
plinkの問題点:プロンプトが2重に表示される
こんなイメージ
user@host:~$ ls<ret>
ls <-これは*shell*のecho
user@host:~$ <-??????
user@host:~$ _<-ここにカーソルくる
原因は確かではありませんが改行コードと思われます
Win環境では CRLF、Linux環境ではLFのみなので
CRとLFの2回のプロンプトが表示されていると考えられます
なので、CRを無視するようにttyに設定します
stty igncr
またコマンドが2重になっているのは
*shell*のechoと端末からのechoが別になっているためと考えられます
なので、echoを無しにします
stty -echo
以上を踏まえて
stty igncr -echo
を.bashrc
などに加えるとプロンプトの2重表示を回避できます
ただしこの設定でTeraTerm等の普通のsshクライアントからloginすると
echoが返らず何を入力しても文字が表示されなくなりますので注意を
ファイルパスのTab補完:ssh-mode
*shell*からssh
を使うと補完が効かなくてめんどうです
そこで ssh-mode
を使うとtrampを利用してパスの補完を行えます
ssh-mode
はmelpaからとってこれます
M-x package install ssh
ssh-mode
にplink
の場所を教えるためには以下のように設定します
;; ssh-modeでplink使うよう設定
(ssh-program "/path/to/plink")
;; trampでpsftp(puttyのsftp)使うよう設定
(tramp-default-method "/path/to/psftp")
;; ファイルパスの補完有効化
(add-hook 'ssh-mode-hook
(lambda ()
(setq ssh-directory-tracking-mode t)
(shell-dirtrack-mode t)
(setq dirtrackp nil)))
M-x ssh
でssh-mode
を起動できます
ホスト名を聞かれるのでいつのもごとくuser@host
形式で入力
ホストが見つかればパスワードを聞かれるので入力
さらにtramp接続のためにもう一度パスワードを聞かれます
まとめ
- ssh-mode
- plink, psftp
- stty igncr -echo
これでTeraTermとさよなら