
TUIを備えた拡張SSHクライアント — 接続、キー、セッションを管理
███████╗███████╗███████╗██╗ ██╗
██╔════╝██╔════╝██╔════╝██║ ██║
█████╗ ███████╗███████╗███████║
██╔══╝ ╚════██║╚════██║██╔══██║
███████╗███████║███████║██║ ██║
╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝
多数のホストを管理する人のための拡張SSH
純Rust製のSSHクライアントで、Netwatch風の高密度TUIを備えています。複数セッション、 ライブホストメトリクス、フリート全体の差分表示を、ターミナルから離れることなく実現します。

cargo install essh
または、macOS / Linux 向けの arm64 / x86_64 バイナリを Releases から入手してください。
ソースからビルドする場合:
git clone https://github.com/matthart1983/essh && cd essh
cargo build --release # ./target/release/essh
essh # ランチャー: 入力して検索、Enterで接続
essh connect deploy@web-01 # ホストへ直接接続
essh workspace open prod # 保存済みのセッション一式を復元
essh run web -- uptime # タグ付けされたグループ全体にコマンドを一斉実行
ホストは ~/.ssh/config から取得されます — IdentityFile、ProxyJump、
Match も含めて — なので、開始前にインポートするものはありません。
よく使う操作はすべて1キーで実行できます。シェルはすべての Ctrl コンビネーションを保持するため、
Ctrl+D は依然としてEOFを意味し、Ctrl+C は依然として割り込みを意味します。
F1 ヘルプ | F2 モニター | F3 ファイル | F4 ポートフォワード |
F5 ミニモニター | F6 デタッチ | F7/F8 前/次のセッション | F9 新規セッション |
F10 コマンドメニュー |
macOS の場合、その行はデフォルトで輝度と音量になっています — F10 はミュートになります。
fn を押しながら使うか、一度 システム設定 → キーボード → F1、F2 などを標準ファンクションキーとして使用 をオンにしてください。以下のプレフィックス方式はどちらも不要で、どこでも動作します。
その他の操作には、Ctrl+A を押して離してからキーを押します — s 分割、w 閉じる、
t テーマ、1–9 セッションへジャンプ、[/] リサイズ。セッション下部のストリップに
現在適用可能なキーが表示されるので、覚える必要はありません。プレフィックスは [session] の
prefix_key で変更できます。
Option/Alt コンビネーションはダッシュボードやその他の画面では動作しますが、
シェルにフォーカスがある間は動作しません — その場合 essh はプレフィックスの1キーのみを
取得し、それ以外はすべて転送するため、Alt+f は readline の forward-word のままで、
Alt+. は yank-last-argument のままです。セッション内ではファンクションキーかプレフィックスを使用します。
| 複数セッション | 1つのウィンドウ内でタブと分割表示。セッションごとのスクロールバックと再接続に対応。 |
| ライブホストモニター | CPU、メモリ、ディスク、ネットワーク、上位プロセスをバックグラウンドでサンプリングし、開いた時にはビューが準備済み。エージェント不要 — 通常のSSH execチャネルのみ。 |
| 差分表示 | 各ホストをピアグループと比較し、どのホストがどの側面で異なり、その理由を表示します。 |
| ファイル転送 | SFTP経由のローカル/リモート2ペインブラウザ。 |
| ポートフォワード | セッションを切断せずにフォワードの追加、確認、削除が可能。 |
| 監査とリプレイ | 構造化JSON監査ログ。セッションはリプレイ用に asciicast として記録。 |
40台のWebサーバーがあり、39台は正常、1台だけカーネルが異なるか、手編集された
nginx.conf があるとします。緑のドットの列では構造的にそれを表示できません。
ESSH はタグによってホストをピアグループにグループ化し、各ホストから同じファクトを収集し、 グループのコンセンサスに対して各ホストをスコアリングします:
100.0% of 16 facet-checks agree
0 facets diverge across 0 hosts.
2 hosts have never been probed, so their facets are unknown rather than in agreement.
Fleet 画面は外れ値となったホストとその主張の根拠となるファセットを明示するため、 判定は主張ではなく検証可能です。収集できないファクトは未収集として報告され — 決して一致として扱われません。
8種類。t で切り替え(セッション内では Alt+t。セッション内の t はシェルに属するため)、
設定に永続化されます:
dark (デフォルト) · terminal · light · solarized · dracula · nord · ocean · sky
terminal は独自の色を固定しません — すべてのスロットが ANSI エントリに解決され、
前景色と背景色はターミナル自身のものを使用するため、pywal、matugen、またはターミナルプロファイルが
そのまま反映されます。sky と light は独自の背景を描画し、ocean はターミナルの背景に
固定パレットを重ねます。
または、コマンドメニューから直接ジャンプできます — F10、またはセッション外では Ctrl+P —
名前を入力してください。
essh --theme terminal # 他にも: system, ansi を受け付け
essh --theme dracula hosts list
このフラグは1回の実行にのみ適用され、書き戻されないため、コミットせずに試す方法です。
TUI 内の t は変更して保存します。
状態は ~/.essh/ に保存されます: config.toml、cache.db、audit.log、
sessions/、recordings/、known_cas/。
essh config init # デフォルト設定を書き込む
essh config edit # $EDITOR で開く
essh config resolve web-01 # ssh_config がホストをどう解決するか表示
ホストキーは検証・キャッシュされ、設定可能な TOFU ポリシー
(strict、prompt、auto) があります。暗号と KEX アルゴリズムを制限できます。
完全な設定とアーキテクチャリファレンス: SPEC.md。
essh hosts list | add | remove | import | health
essh keys list | add | remove
essh workspace list | open | save | show | remove
essh session list | replay <id>
essh diag <session-id> # 過去のセッションの診断
essh why <host> # ホストが接続できない理由を説明
essh audit tail --lines 20
essh bench # 公開済みのパフォーマンス数値
cargo test
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt --check
CI はすべてのプッシュでこれら3つを実行します。
tests/tui_harness.rs は実際のバイナリを PTY 上で駆動し、デッドライン付きで解析された
ターミナル画面に対してアサートします。TUI で重要な失敗は「間違ったフレーム」ではなく
「フレームの欠如」だからです。SSH を必要とするテストは、到達可能なホストがない場合は
自身をスキップします。
フォークして、ブランチを作成し、変更を加え、上記の3つのチェックを実行し、PR を開いてください。
MIT。 LICENSE を参照してください。