AI活用で、再現性のある成果を現場に。「成果に直結!MCP活用事例」ウェビナー|11/20(木)開催 お申し込みはこちら!

無料で試す
ホワイトペーパー

シームレスなSSH接続でターミナルを使う最適な方法

  • Ryan Chae

    Ryan Chae

    Software Engineer

    Ryanは、セキュアでスケーラブルなシステムの開発に豊富な経験を持つソフトウェアエンジニアです。QueryPieでの重要な貢献者として、SSHプロキシアーキテクチャによるシェルネイティブなコマンド制御の設計において重要な役割を果たし、プラットフォームのセキュリティと効率を向上させました。システムアーキテクチャの専門知識とイノベーションへのコミットメントが、進化するエンタープライズクライアントのニーズに応える堅実なソリューションの開発を推進しています。

シームレスなSSH接続でターミナルを使う最適な方法

はじめに

従来のアクセス制御ソリューションにおける最大の課題は何でしょうか。多くのソリューションでは、ユーザーの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.io

Seamless SSH Connectionの仕組み

Seamless SSH Connectionがどのように機能するのかを理解するには、まずSSH ProxyCommandの概念を把握する必要があります。

SSH ProxyCommand

ProxyCommand は、最終的な接続先に到達する前に、中継サーバーを経由してSSH接続をルーティングする方法です。この機能はSSHクライアントの設定で指定でき、SSHクライアントはProxyCommandに設定されたコマンドを実行して対象サーバーとの通信を確立します。


仕組み

  1. ユーザーによる実行: ユーザーがSSHでリモートサーバーへの接続を試みると、SSHクライアントはまず ProxyCommand が設定されているかを確認します。ProxyCommand が設定されている場合、SSHクライアントは対象サーバーへ直接接続する前に、指定されたコマンドを実行します。

  2. データストリーム接続:

  • stdin: SSHクライアントは ProxyCommand プロセスのstdinを通じてデータを送信します。このデータには、ユーザーコマンドやファイル転送リクエストなどが含まれます。
  • stdout: ProxyCommand プロセスは対象サーバーへの接続を管理し、その応答をstdout経由でSSHクライアントに返します。これにより、ユーザーはまるで直接接続しているかのようにサーバーの出力を確認できます。
  1. 双方向データ転送: 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



コンポーネント概要

コンポーネント 説明
SSHOpenSSHクライアントです。
Agent - CLI (qpa)ProxyCommand経由で実行されるシェルコマンドです。
Agent内部ではSubProcessと呼ばれ、MainProcessとのメッセージ通信のためのIPCが実装されています。
Agent - Mainログイン、トンネリング、UIベースの実行を担当するユーザーエージェントです。
APIagentService.protoで定義されたサービスを実装し、提供します。
TargetServer接続先のサーバーです(例: test.querypie.com

活用例

Seamless SSH Connectionを使えば、サーバー開発者はアクセス制御ソリューションが導入された環境でも、これまで慣れ親しんだ方法をそのまま使い続けられます。

たとえば、1番から10番までのテストサーバーに同じ設定を適用する必要があるとします。各サーバーに対してSSHコマンドを毎回手入力し、1台ずつ実行していくのは非効率です。代わりに、以下のような方法を使えば、複数のサーバーで同じコマンドを同時に実行できます。

iTerm2を使って複数サーバーでコマンドを実行する

iTerm2では、ターミナルを複数のペインに分割し、それらに対して同時にコマンドを実行できます。

  • Cmd + D を押すと、ウィンドウを縦方向に分割できます。
  • Cmd + Shift + D を押すと、ウィンドウを横方向に分割できます。
  • Option + Cmd + I を押すと入力同期が有効になり、すべてのペインに同じコマンドを一度に入力できます。

この機能により、最小限の入力で複数のサーバーに対するコマンド実行を効率化できます。



QueryPieのSeamless SSH Connection機能を利用すれば、こうした既存の方法を使い勝手を変えることなく継続して利用できます。

複数サーバー接続用のスクリプトを書く

ターミナルとしてiTerm2を使用していない場合や、自動化のためにスクリプトを使いたい場合は、複数のサーバーに接続して効率的にコマンドを実行するスクリプトを書くこともできます。これは、複数のサーバーをよりプログラム的に同時管理したい場合に特に有効です。

#!/bin/bash
# List of target servers
SERVERS=("test1.querypie.io" "test2.querypie.io" "test3.querypie.io" "test4.querypie.io")
# User account
USER="ryan"
# Commands to execute on each server
COMMANDS=(
  "echo 'TMOUT=300' >> ~/.bashrc"
  "source ~/.bashrc"
)
# Connect to each server and execute commands
for SERVER in "${SERVERS[@]}"; do
  echo "Connecting to ${SERVER}..."
  ssh "${USER}@${SERVER}" <<EOF
    $(printf "%s\n" "${COMMANDS[@]}")
EOF
  if [ $? -eq 0 ]; then
    echo "Commands executed successfully on ${SERVER}"
  else
    echo "Failed to execute commands on ${SERVER}"
  fi
done

このスクリプトは、テストサーバーの 1番から4番 に接続してタイムアウト設定を変更します。すべてのサーバーでコマンドを自動実行するため、各サーバーごとに対話型シェルを開く必要がなく、作業を大幅に効率化できます。

tmuxを使って複数サーバーへ同時接続する

オープンソースツールの tmux-cssh を使えば、複数のサーバーへ同時に接続できます。このツールを利用すると、次のコマンドでSSHセッションを同時に開始できます。

tmux-cssh -ns -ss
'ssh -oProxyCommand='\''qpa ssh %r %h %p'\''
-oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null'
-u admin test{001..01}.querypie.io


結論



アクセス制御ソリューションの導入は、組織のセキュリティを強化するうえで重要なステップですが、ユーザー体験を犠牲にしてはなりません。従来のGUIベースのアクセス制御ソリューションはセキュリティを高める一方で、CLIベースのワークフローに依存する開発者やシステム管理者の生産性を損なうことが少なくありませんでした。

QueryPieのSeamless SSH Connectionは、セキュリティ使いやすさ の両立を実現します。安全なアクセス制御を維持しながら、iTerm2のマルチペイン、スクリプト自動化、tmuxといった、ユーザーが使い慣れたSSHワークフローやツールを中断することなく活用し続けられます。単純な設定変更だけで既存のワークフローを維持できることは、組織全体の生産性にとって大きなメリットです。

セキュリティと使いやすさの適切なバランスを取ることで、QueryPieはアクセス制御ソリューションが日常業務の妨げにならない、シームレスで効率的な作業環境を提供します。

全文を読む

フォームに入力後、限定コンテンツをご覧いただけます。

利用規約プライバシーポリシーに同意して送信する。