
SSHホスト向けの高速ターミナルUI:2回のキーストロークでファジー検索と接続、デュアルペインのSFTPファイル転送、バックグラウンドでのポートフォワーディングを実現。独自のホストデータベースを保持し、sshコマンドを生成します — ~/.ssh/config を編集することはありません。
SSHホストをファジー検索して、2回のキー操作で接続。
sshelfは独自のホストリストを保持し、sshコマンドを組み立てて、その後は邪魔になりません。ターミナルを本物のOpenSSHに委ね、~/.ssh/configには一切触れません。

macOSとLinux、x86_64とarm64に対応。プリビルドパッケージにはRustツールチェーンは不要です。実行時、sshelfは**OpenSSH 8.4+**を必要とします。これはパスワード自動供給の由来となるバージョンです。
Homebrew(macOSまたはLinux):
brew install max-rh/tap/sshelf
シェルインストーラー(プリビルドバイナリ、プラットフォームを自動選択):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-rh/sshelf/releases/latest/download/sshelf-installer.sh | sh
Debian/Ubuntu: 最新リリースから.debを取得し、sudo apt install ./sshelf_*_amd64.deb(または*_arm64.deb)を実行します。
Fedora / RHEL / Rocky / openSUSE: 最新リリースから.rpm(静的ビルド、任意のRPMディストリビューションで動作)を取得し、sudo dnf install ./sshelf-*.x86_64.rpm(または.aarch64.rpm)を実行します。
Gentoo: コミュニティ管理のオーバーレイ(非公式、@masterwolf-gitに感謝)。eselect repository enable masterwolf && emerge --sync && emerge --ask app-admin/sshelfを実行します。
Cargo(crates.ioから; Rust 1.88+が必要): cargo install sshelf。
シェルのタブ補完はすべてのパッケージに同梱されています。インストール後は新しいシェルを開いてください。Linuxでは、シークレットは純RustのSecret Serviceバックエンドを使用します(libdbus/OpenSSLビルド依存関係なし)。
詳細と補完設定: インストールガイド。
私は2ダースほどのマシン(ホームラボ、いくつかのVPS、bastionの背後にある数台のボックス)を運用しており、ssh -J bastion -i ~/.ssh/some-key -p 2222 user@hostを記憶から入力したり、シェル履歴をgrepしたりしていました。試したSSHマネージャーはどれも、~/.ssh/configを所有したがるか、アカウントを発行して誰かのサーバー経由でホストを同期させたがるかのどちらかでした。どちらも望みませんでした。独自のリストを保持し、コマンドを組み立て、その後は邪魔にならないランチャーが欲しかったのです。そして、キーを使用できない少数のホストのためにパスワードをファイルに決して置かずに保持できる場所も欲しかったのです。そこでこれを構築しました。
入力してフィルタリング。Enterで接続。最も頻繁に使用するホストは自動的に上位に浮上します(フレケンシー: 使用回数、新しさで減衰)、tag:prod / site:homelabでリストをさらに絞り込みます。Ctrl-yは実行せずに構築したコマンドをコピーします。シェルからは、sshelf prod-webで名前で接続し、sshelf -で最後のホストに再接続します。どちらもTUIを開きません。

sshにexec()するsshelfはホストレコードからargvを構築し、自身のUIを破棄してから、OpenSSHで自身を置き換えます。セッションとあなたの間にラッパーはありません: 本物のTTY、あなたのssh、configフリーのフラグ。セッションが終了すると、メニューではなくシェルに戻ります。実行されるコマンドは、Ctrl-yが表示するものとまったく同じです。
コマンドの構築方法。
Ctrl-tは単一の認証済み接続を介して、左側にあなたのファイル、右側にホストのファイルを開きます。Spaceでマーク、Ctrl-aでフィルタが表示するすべてをマーク、Ctrl-sでセット全体をどちらかの方向に送信、F7でディレクトリを作成します。宛先に既に存在する名前はスキップされ、上書きされることはありません。

Ctrl-fはLocal、Remote、またはSOCKSトンネルを開きます。これはsshelfを終了した後も、ターミナルを閉じた後も実行され続けます。F4はすべてのホストにわたってそれらのすべてを一覧表示し、選択したものを停止します。これらはpidで追跡され、実際に実行中のプロセスと照合されるため、終了後にリストに残ることはありません。デーモンもスーパーバイザーもありません。

tmux = "window"または"pane"を設定すると、Enterはsshelfを置き換える代わりに、ホストを新しいtmuxウィンドウ(ホスト名にちなんで命名)または新しいペインで開きます。セッションを終了しても、ピッカーはまだそこにあり、実行され続けています。

F3はサイトを管理します: サイトはホストをグループ化し、共有bastion、ユーザー、ポート、キーを保持できます。これらは接続時にメンバーが継承し、ホストが未設定のフィールドのみを埋めます。タグはフィルタリングする自由形式のラベルです。どちらもリストに表示され、継承されたbastionはsshelfが構築するコマンドに表示されます。

sshpassなしのパスワードキーを使用できないホストのために、sshelfはパスワードをOSキーリング(またはヘッドレスボックス上のage暗号化ボールト)に保存し、sshが要求したときにSSH_ASKPASSを通じて供給します。実際のパスワードまたはパスフレーズプロンプトの形状を持つプロンプトにのみ応答するため、サーバーは類似テキストでシークレットをフィッシングできません。パスワードはファイルにもpsにもコマンドラインにも決して含まれません。検証コードも必要なホストは、接続開始前にプロンプトが表示されます。 パスワード、キー & 2FA
· セキュリティ。

sshelf exportは独自のssh_configフラグメントを1つ書き出し、~/.ssh/configに貼り付ける単一のInclude行を提供します。その後、通常のssh、scp、rsync、git、およびSSH configを読み取るもの(VS Code Remote-SSH、JetBrains Gateway)は、bastionも含めてsshelfホストを名前で解決します。ファイルはホストが変更されるたびに更新されます。sshelfは依然として~/.sshの下には何も書き込みません。

sshelf importは~/.ssh/configを厳密に読み取り専用で読み取り、モデル化できるホストをコピーします。sshelf import --tailscaleは独自のtailscaleCLIを実行し、tailnetを検索可能なホストに変換します。MagicDNS名、サイトとしてのtailnet、ACLタグをタグとして使用します。どちらも追加専用であるため、再実行は常に安全で、要求しない限り発生しません。
sshelf doctor何かが機能していないときのための1つのコマンド。OpenSSHバージョン、シークレットバックエンドが実際に開くかどうか、hosts.tomlが解析できるかどうか、存在しないサイトを指すホスト、欠落したエージェントソケット、ドリフトしたエクスポートをチェックします。それぞれの修正方法を示します。読み取り専用で、何かが失敗した場合は終了コード1を返し、ホストに接続することはありません。

2026年9月に各プロジェクトのREADME(Termiusについてはサイト)から編集。「記載なし」とあるセルは、プロジェクト自身のドキュメントに記載がないことを意味します。
sshelfにはダッシュボード、コンテナ管理、チーム共有、Windowsビルドはありません。最初の3つは選択であり、PRIVACY.mdがその理由を説明しています: それぞれがsshelfがあなたの何かを保持するか、独自に何かと通信することを意味するからです。
~/.ssh/configを決して編集せず、~/.sshの下に何も書き込みません。hosts.tomlにシークレットなし。このファイルはコミットして共有しても安全です。PRIVACY.mdは何を読み取り、書き込み、実行し、送信するかを示しています。
SECURITY.mdは保存されたシークレットの脅威モデルです。
sshelf # TUIを起動(Ctrl-aで最初のホストを追加)
sshelf import --dry-run # ~/.ssh/configからの読み取り専用インポートをプレビュー
sshelf import # ...実行する
sshelf import --tailscale # ...またはTailscale tailnet全体をインポート
sshelf prod-web # 保存済みホストに直接接続(TUIをスキップ)
sshelf - # 最近使用したホストに再接続
sshelf list tag:prod --json # スクリプト可能な一覧表示(フィールド + sshコマンド)
sshelf print-command db # 実行せずにsshコマンドを表示
sshelf export # 通常のssh/scp/VS Codeがホストを認識するためのIncludeファイル
sshelf doctor # 何かが機能していない? セットアップをチェックして修正方法を確認
TUI内: 入力してフィルタリング(tag:NAME / site:NAMEも可)、Enterで接続。
F1ですべてのキーを表示。
**ユーザーガイド**がすべてをカバーしています:
クイックスタート ·
CLIリファレンス ·
設定 ·
FAQ ·
sshelf doctor。
機能別ページとしてファイル転送、
ポートフォワーディング、
サイト & タグ、
パスワード & 2FA、および
SSH-configエクスポートがあります。
アーキテクチャと設計上の決定はdocs/にあり、マシン向けの
llms.txtもあります。
質問、機能提案、またはそれで構築したものの紹介は
GitHub Discussionsでどうぞ。貢献は歓迎します。
CONTRIBUTING.mdから始めてください。
sshelfが役に立つなら、Bitcoinチップは感謝されます(完全に任意):
Bitcoin: bc1qcdeyhpwq76u97dhymx876n49uq85z4y3ccrpje
MITまたはApache-2.0のいずれかでデュアルライセンス(Rustエコシステムの標準)。
| sshelf | purple | omnyssh | Voltius | Termius |
|---|
| 実行環境 | ターミナル(TUI) | ターミナル(TUI) | ターミナル(TUI)+ デスクトップアプリ | デスクトップアプリ(Tauri) | デスクトップ + モバイルアプリ |
~/.ssh/configの編集 | しない | する、その場で | しない、起動時に読み取る | n/a(独自ストア) | n/a(独自ストア) |
| アカウント必須 | いいえ | いいえ | いいえ | リアルタイム同期用 | はい |
| 他サービスのトークン保持 | いいえ | はい、クラウドプロバイダーごとに1つ | いいえ | はい、同期用 | 記載なし |
| 独自のネットワーク呼び出し | なし | クラウドプロバイダー同期 | ホストメトリクスポーリング | 同期、更新、ホストメトリクス | 同期 |
| シークレット管理 | あなたのOSキーリング / ageボールト | キーリング + パスワードマネージャー | 記載なし | そのE2EEボールト | その暗号化ボールト |
| 接続 | あなたのsshにexec() | あなたのsshコマンドを実行 | 内蔵ターミナル | 内蔵ターミナル | 内蔵ターミナル |
| ポートフォワード | はい、終了後も存続 | はい、ライブモニタリング | 記載なし | はい | はい |
| ファイル転送 | デュアルペインSFTP | 分割ペイン | 2パネルSFTP | デュアルペイン、ドラッグ&ドロップ | SFTP |
| コンテナ / メトリクスダッシュボード | いいえ | はい | はい | はい | 記載なし |
| チーム共有 | いいえ | いいえ | いいえ | 有料プラン | 有料プラン |
| プラットフォーム | macOS、Linux | macOS、Linux | macOS、Linux、Windows、Termux | Windows、macOS、Linux | macOS、Windows、Linux、iOS、Android |
| ライセンス | MIT / Apache-2.0 | MIT | Apache-2.0 | AGPL-3.0 | プロプライエタリ |