Cygterm: 任意のターミナルソフトで ssh 設定を一極化
Tagged:  •  

折角 ssh-agent との連携を強化しても、 専用のターミナルソフト(PuTTY UTF-8 TeraTerm Pro with TTSSH2Poderosa(旧 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 との橋渡し

起動が成功していれば、 ターミナルソフトが起動され bash のプロンプトが表示されます。 ls 等でローカルホスト上の bash であることを確認してみてください。

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 との橋渡し

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_ で始まる行はコメントアウトしておいたほうが無難です。