SSH ControlMasterでリモートMacをどう設定?2026年マルチセッションガイド

SSH ControlMasterでリモートMacをどう設定?2026年マルチセッションガイド

SSH ControlMasterを使えば、ControlPathを一意にし、そのソケットを現在のユーザーだけが扱える状態にすることで、リモートMacへの複数のSSH接続を共有できます。対象は複数のコマンドやファイル転送を繰り返す開発・運用作業です。ただし、接続共有は切断後もコマンドを実行し続ける仕組みではありません。

複数のSSHコマンド、SCP転送、ビルド処理をリモートMacで行う開発者向けです。
共有ノードを管理するDevOps担当者は、ソケットの権限、接続の終了方法、ユーザーごとの分離を重点的に確認してください。

接続共有とタスク継続は別の仕組みです

SSH ControlMasterは、同じ接続条件を使うクライアント間で、SSHのトランスポート接続を共有するOpenSSHの機能です。SSH接続上の複数チャンネルという考え方はRFC 4254の接続プロトコルに記載されています。

ControlMasterは共有接続の作成と利用、ControlPathは共有接続のソケット位置、ControlPersistは利用中のクライアントがいなくなった後にマスター接続を維持する時間を指定します。これらは役割が異なります。設定の細部は、利用中のクライアントのOpenSSH ssh_configマニュアルで確認してください。

複数のSSHコマンドはどうすれば同じ接続を使えますか。
同じホスト設定、ユーザー、ポートなどで接続し、ControlMasterとControlPathが有効になるようにします。後から実行したSSHコマンドや、同じ設定を利用するSCPが既存のマスター接続を使えるかは、コマンドで検証してください。

接続が共有されても、ターミナルの切断やネットワーク障害の後に、実行中のビルドやスクリプトが必ず続くわけではありません。接続共有と、切断後のタスク保持は別々の要件として扱います。

第一段階:接続先とログイン条件をそろえます

まず、利用するクライアントでOpenSSHの設定を確認します。バージョンによるオプションの挙動や既定値を決めつけず、実際に使うクライアントのマニュアルと動作で確かめてください。

リモートMac側では、macOSの「リモートログイン」が有効で、対象アカウントにログイン権限があることを確認します。設定の場所とSSH・SFTPアクセスに関する説明は、macOSのリモートログインに関する公式案内を参照してください。

接続先は、実際に使うホスト名、アカウント、ポート、鍵にそろえます。SSHコマンドの接続先とSCPの接続先で別のホスト名やユーザーを使うと、同じ共有接続に一致しない場合があります。

ControlPathの名前が重複しないようにするにはどうしますか。
ホスト名、接続ユーザー、ポートなどの条件を反映できるトークンを使います。現在のOpenSSHマニュアルにある%Cは接続を識別するハッシュ値です。実際のソケットパスは短く保ち、利用するクライアントで対応状況を確認します。

第二段階:ホスト別の設定で共有を有効にします

クライアントの~/.ssh/configに、対象のホストだけに適用される設定を追加します。以下は設定例です。ホスト名、ユーザー名、鍵の場所は環境に合わせて置き換えてください。

Host remote-mac
    HostName <REMOTE_MAC_HOST>
    User <LOGIN_USER>
    Port 22
    IdentityFile ~/.ssh/<KEY_FILE>
    ControlMaster auto
    ControlPath ~/.ssh/cm-%C
    ControlPersist 10m

ControlMaster autoは、利用できるマスター接続があれば再利用し、なければ新しい接続を作る設定です。ControlPersist 10mは、最後のクライアントが切断した後の維持時間を指定する記述例であり、すべての環境で同じ挙動になるという保証ではありません。設定値の意味と利用可能な形式はOpenSSHの設定マニュアルで照合します。

ソケット用ディレクトリを分ける場合は、所有者とアクセス権を確認します。たとえば次のように作成できます。

mkdir -p ~/.ssh/controlmasters
chmod 700 ~/.ssh/controlmasters

その場合は、ControlPathを~/.ssh/controlmasters/cm-%Cに変更します。ディレクトリを共有アカウントから読み書きできる状態にしないでください。ソケットにアクセスできる主体が広がると、意図しない利用を防ぐ境界が弱くなります。

設定 役割 運用上の確認点
ControlMaster 共有するマスター接続を作成・利用します 初回と後続の接続で期待する動作になるか確認します
ControlPath マスター接続のソケット位置を指定します 接続条件を区別し、アクセス権を制限します
ControlPersist クライアントがいない間の接続維持を指定します 維持時間と切断時の扱いを実機で確認します

第三段階:マスター接続と後続コマンドを検証します

設定を保存したら、まずホスト別名で接続します。初回接続が成功し、認証先のアカウントとホストが想定どおりであることを確認してください。

ssh remote-mac

次に別の端末、または別のシェルから、同じ設定を使ってコマンドを実行します。

ssh remote-mac 'whoami'

マスター接続があるかを調べるには、次の制御コマンドを使えます。

ssh -O check remote-mac

出力の表記はクライアントによって異なる場合があります。エラーが出た場合は、別名の設定が一致しているか、ControlPathが同じか、ソケットへアクセスできるかを確認します。接続共有を無効にした接続や異なるユーザー名での接続も試し、意図しない条件まで共有されていないことを確かめます。

ControlPersistの時間が過ぎると何が起きますか。
指定した維持時間が経過した後は、次のクライアントが既存のマスター接続を再利用できず、新しい接続が必要になる場合があります。ネットワーク切断やリモートMacの停止は別の事象です。実際の維持・再接続動作は、使用するクライアントで確かめてください。

第四段階:並行するSSHとSCPを分離して扱います

スクリプト、複数の端末、複数のリポジトリから接続する場合は、まず同じホスト別名と認証条件を使っているかを見ます。別ユーザー、別ポート、別鍵を使う処理は、同じ接続として扱われる前提にせず、個別に設定と動作を確認します。

SCPもSSHの接続設定を参照します。ホスト別名で転送する場合は、送信側・受信側の指定が設定と一致しているかを確認してください。利用中のscpの仕様はOpenSSH scpマニュアルで確認できます。

scp <LOCAL_FILE> remote-mac:<REMOTE_PATH>

共有Macノードでは、個人アカウントごとに設定とソケット領域を分け、アクセスを必要最小限にします。監査が必要な環境では、誰の資格情報でどのホスト設定を使うかが追跡できることも受け入れ条件に含めてください。サーバー側のログイン許可や認証条件は、sshd_configマニュアルと実際のmacOS設定を照合します。

ssh -O checkで共有状態を確認できても、ビルドの継続実行や途中からの再開を確認したことにはなりません。接続状態とタスクの状態は別々に記録してください。

第五段階:異常時は影響範囲を確認して復旧します

クライアントを閉じた場合、ネットワークが切れた場合、マスター接続だけが失敗した場合、リモートMac自体が停止した場合では、復旧手順が異なります。まず接続先への再ログイン可否を確認し、失敗したコマンドやファイル転送を安全に再実行できるかを判断します。

マスター接続を閉じる操作は次のとおりです。

ssh -O exit remote-mac

終了前に、その接続を利用している別の端末や処理がないことを確認します。共有中の接続を閉じると、他の利用者の作業に影響する可能性があります。接続を強制的に切る前に、対象のホスト別名と利用者を確認してください。

接続が切れた後もビルドを続ける必要がある場合はどうしますか。
ControlPersistだけに依存しないでください。タスク自体を継続・復旧させる方法を別途用意し、切断後に状態を確認できる運用を設計します。必要な仕組みはビルドの再実行可能性や成果物の保存方法に応じて選びます。

最終判断:条件を満たす場合だけ接続共有を採用します

次の条件分岐で、運用に組み込むかを決めます。

  • 同じユーザー・ホスト・ポートで複数のSSHやSCPを実行し、ソケットをユーザー単位で保護できる場合は、ControlMasterによる接続共有を採用します。
  • 複数の資格情報や共有アカウントが混在し、ソケットの所有者と利用者を分離できない場合は、共有を有効にせず、設定と権限を整理してから再評価します。
  • 切断後もビルドを続ける必要がある場合は、ControlPersistをタスク保持策として扱わず、別の継続実行・復旧方式を用意します。
  • リモートMacが停止した際に処理を失うと困る場合は、再接続だけでなく、コマンドの再実行可否と成果物の保全を受け入れ試験に含めます。

本番投入前には、複数のSSHコマンド、SCPによるファイル転送、実際のリモートビルドを一通り実行します。共有状態の確認、マスター終了後の再接続、切断時に何を再実行するかまで記録すれば、接続の再利用とタスク復旧を混同せずに運用できます。

個別のLinuxサーバーを使う方法は、macOS専用のツールチェーンが必要な作業には適しません。一方、手元のMacだけで処理すると、ローカル資源を使い続け、常時稼働や複数人での検証にも制約が出ます。Macを購入すれば常設環境を自分で管理できますが、短期の検証や一時的なビルド用途には初期負担と保守が残ります。

そのため、必要な期間だけmacOS環境を使いたい場合は、リモートMacのレンタルを選択肢にできます。SFTPMACの環境が作業要件に合うかは、利用できるMac環境とレンタル料金の案内を確認し、接続方法、アカウント分離、タスク復旧要件を照らし合わせて判断してください。