Windows用高機能sshクライアント Xshell

  • 139
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

追記:2016年4月よりライセンス形態が変更になりました https://www.netsarang.com/download/free_license.html
個人・家庭ユーザーは無償で使用できるようになりました。


Windows用sshクライアントで使い勝手のよいものはないかなと探していたのですが、海外のサイトの紹介で見つけたXshellというソフトウェアが高機能・高カスタマイズ性で使いやすかったので、紹介したいと思います。(日本語の紹介記事はたぶんこれが初めてかも)
メイン画面
(ただし商用利用は有償です)

背景

  • Linuxサーバーの構築・管理が仕事
    • 作業用Linuxサーバーにsshでログインしてから作業
    • Cygwin上から管理サーバーにsshログインすることもあり
  • これまで使用したWindows用sshクライアント
    • Poderosa 4.3.8b (メイン)
    • Cygwinのsshクライアント
    • putty (予備)
    • RLogin (Poderosaからの乗り換え前提で試しに使用)

特徴

  • ssh以外に、sftp, telnet, serial接続に対応
    • CygTermを使えばCygwinも利用可能
    • パスワード・パスフレーズの保存
    • ログイン時の自動テキスト送信(○○を受信したら△△を送信)
    • ssh-agent同梱
    • X11 Forwarding
  • タブに対応
    • 画面の分割もOK
    • キー入力を複数のタブに送出できる
    • xtermならプロンプトの名前をタブ名に表示
    • タブの色を青・赤・黄・紫に変更できるので、本番環境などと区別がつきやすい
  • VBScript, Javascript, Python言語によるマクロ
    • サーバーへ接続をしたり、ターミナルに文字を送ったり、受信した文字を変数で受け取れる
    • CreateObjectが使えるので、ローカルファイルを読み書きしたり、Excelを操作することも可能
  • ほぼ全てのキーをカスタマイズ可能
    • ソフトウェアの機能を呼び出す、文字列の送信、マクロの実行、アプリの実行が指定できる
    • クイックコマンドという機能で、画面上に表示されたボタンのワンクリックで呼び出すことも可能
    • ターミナル画面のスクロールもキーだけでできる
  • 接続先指定
    • フォルダ分けできたり、メイン画面に"リンクバー"としてショートカットを配置できる
    • 一覧上でキーを押せば、該当の先頭文字の項目が選択される
  • その他アプリ特徴
    • 日本語表示対応(ターミナル上で日本語入力も可)
    • 背景を透明に
    • ターミナル画面の文字列検索や、テキストエディタへの出力ができる

スクリーンショット

※メニューが英語ですが、日本語にもできます
※ツールバーの項目や配置は自由に変えられます
メイン画面
ショートカットキー設定

マクロサンプル

sample
function Main()
{
    xsh.Session.Open("C:\...\NetSarang\Xshell\Sessions\New Session.xsh");
    xsh.Screen.Synchronous = true;
    xsh.Session.Sleep(1000);

    //*** WaitForString ***
    xsh.Screen.WaitForString("aaa");        // input "aaa" in Terminal

    //*** Send ***
    xsh.Screen.Send("cat /etc/passwd");
    xsh.Screen.Send(String.fromCharCode(13));
    xsh.Session.Sleep(1000);

    //*** Get, Clear ***
    var ScreenRow, ReadLine, Items;

    ScreenRow = xsh.Screen.CurrentRow - 1;
    ReadLine = xsh.Screen.Get(ScreenRow, 1, ScreenRow, 40);
    Items = ReadLine.split(":");
    xsh.Dialog.MsgBox(Items);
    xsh.Screen.Clear();

    //*** Property ***
    xsh.Screen.Synchronous = false;
    var MsgProp;
    MsgProp = "Col:" + xsh.Screen.CurrentColumn + ", ";
    MsgProp = MsgProp + "Row:" + xsh.Screen.CurrentRow + ", ";
    MsgProp = MsgProp + "TermCol:" + xsh.Screen.Columns + ", ";
    MsgProp = MsgProp + "TermRow:" + xsh.Screen.Rows; 
    xsh.Dialog.MsgBox(MsgProp);
}

ちなみに自分は、サーバー内のファイルをBase64でエンコードして画面上に出力、それを受け取ってテキストファイルとしてローカルに保存し、Base64デコードすることで、ファイルを受信するマクロを書きました。
いちいちsftp/scpでやりとりしたり、踏み台を経由した先のサーバーだったりするときはお手軽で便利!

欠点

  • 設定ファイルが分散している
    • アプリケーションのディレクトリ
    • マイドキュメント
    • レジストリ
  • vimで開いてる時にスクロールすると、Vim起動前のターミナル表示が見れちゃってしまう
  • マクロからアプリの各機能を呼び出せない
    • 機能をキーボードショートカットに割り当てておき、マクロからSendKeysを呼び出すことでできなくはない

商用利用時 $89/yearなのでちょっとお高いですが、その分高機能で様々なカスタマイズができるので、適宜試してみてください。