折角 ssh-agent との連携を強化しても、
専用のターミナルソフト(PuTTY や
UTF-8 TeraTerm Pro with TTSSH2、
Poderosa(旧 VaraTerm)等)は ssh-agent と連携できないどころか、
ssh 設定(~/.ssh/config)の共有すらできません。
しかし rxvt は日本語化パッチが必要ですし、 日本語ダメ/編集機能ダメな Cygwin コンソールは論外でしょう。
おまけに、 近年は telnetd が導入されていないサーバも多く、 ssh ポートフォワード + ターミナルソフトという選択肢も余命わずか、 といったところです。
そこで、この問題を Cygterm を用いて解決します。
本来は、
ローカルホスト上で稼動している bash とターミナルソフトの橋渡しを行う
Cygterm ですが、
/bin/ssh と併用しても問題なく機能してくれます。
インストールは、
gcc や make、tar 等の開発系
Cygwin コマンドがインストールされていることを確認した上で、
ダウンロードしたアーカイブファイルを展開し、
展開されたディレクトリ直下で make instal を実行してください。
~/bin 配下にインストールされます。
UTF-8 TeraTerm Pro with TTSSH2 には cygterm が添付されているので、 こちらから入手することも出来ます。
インストールが済んだなら、 まずはローカルホスト上で稼動している bash をターミナルソフトから利用してみましょう。
以下、実行例は Tera Term を用いたものを示します。 また、表示の体裁上、複数行に渡って記述していますが、一行で起動してください。
cygterm.exe
-t 'ttermpro.exe /KR=SJIS /KT=SJIS %s %d'
-s /bin/bash
起動が成功していれば、 ターミナルソフトが起動され bash のプロンプトが表示されます。 ls 等でローカルホスト上の bash であることを確認してみてください。
「127.0.0.1" への接続」と表示されているのは、
ターミナルソフトが
「ローカルホスト上で稼動する Cygterm プロセスに接続している」からであって、
「ローカルホスト上の bash と連携している」からではありません。
後述する ssh 起動時のものと区別するためにも、
ウィンドウタイトルに "@localhost"
などと表示するようにした方が良いでしょう
(Tera Term なら
/W="title" オプション)。
次は ssh との連携です。
ssh 設定(~/.ssh/config)
を元に、適切な接続先を指定してください。
cygterm.exe
-t 'ttermpro.exe %s %d'
-s '/bin/ssh 接続先'
ssh-agent でパスフレーズを入力済みであれば、 リモートホストへの接続を確立している ssh に対するパスフレーズの入力は不要ですので、 即接続が確立する筈です。
以上で、
好みのターミナルソフトを使いつつ
ssh 設定を ~/.ssh/config で一元化することが出来ました。
後は、
接続先ホスト/ユーザ毎に
cygterm 起動用のショートカットでも作成しておきましょう。
- ターミナルソフトが起動しない:
- 起動コード例は ttermpro.exe にパスが通っている前提で書かれています。 必要に応じてフルパス指定するなり、 Path 環境変数を設定するなりしてください。
- ターミナルソフトが bash と連携しない:
- ターミナルソフトの起動引数に指定している
%sおよび%dは、 Cygterm 内部で printf によりホスト名とポート番号に置き換えられます。 これらの順序を入れ替えても駄目ですし、 コマンドラインで接続先を指定できないターミナルソフトとの連携は出来ません。 - HOME 以外で bash が起動される:
- Cygterm の -s 引数で指定されたプロセスは、 Cygterm が起動されたディレクトリで稼動します。 起動用のショートカットを使用する場合は、 ショートカットプロパティの「作業フォルダ」設定を適宜修正してください。
- bash の HOME 環境変数設定が変:
- Cygterm は
~/bin/cygterm.cfgに記述された環境変数設定を行いますので、ENV_で始まる行はコメントアウトしておいたほうが無難です。