シームレスなSSH接続でターミナルを使う最適な方法
2025年3月10日
はじめに
従来のアクセス制御ソリューションにおける最大の課題は何でしょうか。多くのソリューションでは、ユーザーのPCに別途エージェントをインストールし、GUIベースのインターフェース経由でしかサーバーに接続できません。この方式は、CLI環境に慣れた開発者やシステム管理者のワークフローを大きく妨げます。ショートカットやスクリプトを活用した効率的な作業方法を捨て、GUIベースのアクセスに切り替えることを強いられれば、生産性が低下するのは避けられません。
この問題を解決するために、QueryPieはSeamless SSH Connectionを開発しました。このアプローチは、ユーザーが使い慣れたSSHワークフローを維持したまま、セキュリティを確保します。SSH設定ファイルに少し手を加えるだけで、好みのCLI環境を犠牲にすることなくアクセス制御を適用できることが、このソリューションの大きな利点です。
Host *.querypie.io Port 22 ProxyCommand qpa ssh %r %h %pこの設定を行えば、ユーザーは普段使い慣れているSSHコマンドと同じ方法で対象サーバーに接続できます。
ssh ryan@test.querypie.ioSeamless SSH Connectionの仕組み
Seamless SSH Connectionがどのように機能するのかを理解するには、まずSSH ProxyCommandの概念を把握する必要があります。
SSH ProxyCommand
ProxyCommand は、最終的な接続先に到達する前に、中継サーバーを経由してSSH接続をルーティングする方法です。この機能はSSHクライアントの設定で指定でき、SSHクライアントはProxyCommandに設定されたコマンドを実行して対象サーバーとの通信を確立します。
仕組み
ユーザーによる実行: ユーザーがSSHでリモートサーバーへの接続を試みると、SSHクライアントはまず
ProxyCommandが設定されているかを確認します。ProxyCommandが設定されている場合、SSHクライアントは対象サーバーへ直接接続する前に、指定されたコマンドを実行します。データストリーム接続:
stdin: SSHクライアントは
ProxyCommandプロセスのstdinを通じてデータを送信します。このデータには、ユーザーコマンドやファイル転送リクエストなどが含まれます。stdout:
ProxyCommandプロセスは対象サーバーへの接続を管理し、その応答をstdout経由でSSHクライアントに返します。これにより、ユーザーはまるで直接接続しているかのようにサーバーの出力を確認できます。
双方向データ転送:
ProxyCommandはstdinから受け取ったユーザー入力を対象サーバーへ転送します。対象サーバーからの応答は受信され、stdoutを通じてSSHクライアントに返されます。これにより、SSHクライアントと対象サーバーの間に双方向の通信チャネルが確立されます。
ProxyCommandで使用される特別な変数
%r→ SSHコマンドで指定されたユーザー名%h→ SSHコマンドで指定された対象サーバーのアドレス%p→ SSHコマンドで指定された対象サーバーのポート(-pで上書きしない限り既定値は22)

QueryPie Agent - CLI拡張
Seamless SSH ConnectionでProxyCommandに使われる qpa コマンドは、QueryPie経由でSSHアクセスを可能にする、QueryPie Agentの拡張CLI版です。SSHクライアントの接続はAgentを経由してトンネリングされ、QueryPieシステムによるユーザー認証が行われます。
接続構成 SSH Client → Agent CLI → ARiSA Proxy Server → Target Server

コンポーネント概要
コンポーネント | 説明 |
|---|---|
SSH | OpenSSHクライアントです。 |
Agent - CLI ( | ProxyCommand経由で実行されるシェルコマンドです。 |
Agent - Main | ログイン、トンネリング、UIベースの実行を担当するユーザーエージェントです。 |
API | agentService.protoで定義されたサービスを実装し、提供します。 |
TargetServer | 接続先のサーバーです(例: |
活用例
Seamless SSH Connectionを使えば、サーバー開発者はアクセス制御ソリューションが導入された環境でも、これまで慣れ親しんだ方法をそのまま使い続けられます。