
Claude CodeのSSH Sessions機能を試してみた
こんにちは、せーのです。今日はClaude Code DesktopのSSH Sessions機能について、実際にEC2で動かして確認したことをまとめていきます。
「Claude CodeからEC2を操作したい」「リモートマシンをClaude Codeで扱いたい」という声をよく聞きますが、いざ設定しようとすると「EC2にClaude Codeのインストールは必要?」「PCを閉じたら処理は止まる?」「Remote環境との違いは?」など、意外とわかりにくい部分が多いです。
この記事では、よくある疑問をQ&A形式で解決しながら、SSH Sessionsの全体像を整理していきます。実際にEC2(Ubuntu 22.04, ap-northeast-1)で動かして確認した内容を盛り込んでいます。
想定していること
- Claude Code Desktopがローカルにインストール済み
- AWS EC2インスタンスにSSHで接続できる環境がある
- Claude Codeの基本的な操作(チャット、ファイル編集等)は経験済み
Claude Code SSH Sessionsとは
Claude Code SSH Sessionsは、Claude Code Desktopをインターフェース(操作画面)として使いながら、EC2などのリモートマシン上でコマンドを実行する機能です。
ポイントは「UIはローカル、実行はリモート」という構成です。Claude Code Desktopが手元のPCで動いていますが、ファイル操作やコマンド実行はすべてSSH接続先のマシンで行われます。
公式ドキュメントでもこのように説明されています。
Claude runs on the remote machine with access to its files and tools.
つまり、Claudeが見ているファイルシステムもツールも、すべてリモートマシン側のものです。
Local / SSH / Remote の3環境比較
Claude Codeには実行環境が3つあります。違いを整理すると、Localは「手元のPCですべて完結」、SSHは「手元で操作してリモートで実行」、Remoteは「すべてAnthropicクラウドで実行」というイメージです。
| 項目 | Local | SSH | Remote |
|---|---|---|---|
| 実行場所 | ローカルPC | EC2等のリモートマシン | Anthropicクラウド |
| Claude Codeのインストール先 | ローカルPC | ローカルPCのみ | 不要(クラウド上で動作) |
| PCを閉じたら | 処理終了 | 処理終了 | 継続可能 |
| バックグラウンド実行 | 不可 | 不可 | 可能 |
| MCP Connectors | 利用可能 | 利用可能(要EC2側設定) | 利用不可 |
| セッション引き継ぎ | 可能 | 不可 | 可能 |
| AWS IAMロール活用 | 不可(ローカル認証) | 可能(EC2のIAMロール) | 不可 |
特にSSHとRemoteの違いは重要です。SSHはPCを閉じると処理が止まりますが、IAMロールや(設定すれば)MCPが使えます。Remoteはその逆で、PCを閉じても処理が継続しますが、MCPやIAMロールは使えません。
よくある疑問を解決していく
Q: EC2にClaude Codeのインストールは必要?
不要です。 これが一番の驚きでした。
実際にClaude Code CLIが一切入っていないEC2に接続してみたところ、何の問題もなく動作しました。仕組みを整理すると、Claude Code Desktop(ローカル)がSSHでEC2に接続し、コマンドを実行します。AIの推論(Claude Opus 4.6などのモデル)はAnthropicのクラウドで動いており、EC2は「コマンドの実行場所」として機能しているだけです。
EC2側に必要なのは、実行したいコマンドやツール(git、Python、Node.js など)だけです。
Q: 実際に動いているのはEC2側のClaude?
EC2上でコマンドが実行されていますが、AIの推論はAnthropicクラウドで行われています。
実際にSSHセッションで「このセッションはどこで実行されていますか?」と聞いてみたところ、Claude Desktopが自動的にいくつかのコマンドを実行して環境情報を収集し、こんな回答が返ってきました。
$ uname -a
Linux ip-172-31-17-76 6.8.0-1046-aws #49~22.04.1-Ubuntu SMP Mon Feb 2 16:17:58 UTC 2026 x86_64
| 項目 | 詳細 |
|---|---|
| OS | Ubuntu 22.04.5 LTS |
| ホスト | EC2 インスタンス (ip-172-31-17-76) |
| リージョン | ap-northeast-1(東京) |
| モデル | Claude Opus 4.6 |
EC2のファイルシステムを直接操作でき、EC2に付与されたIAMロールの権限もそのまま使えます。
Q: PCを閉じたら処理はどうなる?
SSH接続が切断され、処理は終了します。 これはSSH Sessionsの最大の制約です。
ノートPCのフタを閉じたり、Wi-Fiが切れたりするとSSH接続が切断され、実行中の処理も止まります。PCを閉じても処理を継続したい場合は、Remote環境を使ってください。Remote環境ではAnthropicのクラウド上でClaude Codeが動作するため、ローカルPCの状態に依存しません。
Q: IAM API KEYとSSH踏み台、どちらがいい?
EC2上のAWSリソースにアクセスする方法として、EC2のIAMロールを使う方式が推奨です。
2つの方式を比べてみましょう。
IAM API KEY方式
- ローカルPCにAWSアクセスキーを保存
- キーの漏洩リスクがある
- キーのローテーション管理が必要
IAMロール方式(推奨)
- APIキーをローカルPCに保存しない
- EC2のIAMロールで権限を管理(一時的な認証情報を自動取得)
- CloudTrailで操作を追跡可能
ただし、気になることが一点あります。昨今のAWS認証トレンドは、むしろ「SSHキー自体を持たない方向」に進んでいます。
最も主流:ブラウザ認証(AWS IAM Identity Center)
# ブラウザが開き、SSOでログインするだけ
aws login
# または
aws sso login --profile my-profile
ブラウザで認証するだけで一時的な認証情報が自動発行され、AWSにアクセスできます。SSHキーどころか、アクセスキー・シークレットキーの管理も不要です。
AWS Systems Manager Session Managerを使えば、SSHポートを開けずにIAM権限だけでEC2に接続することもできます。EC2 Instance Connectも都度一時的なSSH公開鍵を発行してくれるので、永続的なキー管理が不要です。
現在のSSH Sessions機能は従来型のSSHキーペアが前提のため、これらのキーレス認証トレンドとは逆行する部分があります。セキュリティポリシーによっては使えない場面もあるかもしれない、という点は念頭に置いておいてください。
Q: MCP ConnectorsはSSH Sessionsでも使える?
EC2側に設定が必要です。ここはかなりのハマりポイントです。
Claude Desktopのチャット画面でSlack MCPを設定していても、SSH Sessions中には使えません。実際に試してみたところ、こんなメッセージが出ました。
Slack MCP は利用不可 — 現在の環境にはSlack用のMCPサーバーが設定されていません。
なぜかというと、MCP設定ファイルの参照先がまったく別物だからです。
| 設定ファイル | |
|---|---|
| Claude Desktop(チャット) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Claude Code(SSH Sessions) | EC2側の ~/.claude.json |
SSH Sessions中は作業環境がEC2になるため、Claude CodeはMCPの設定をEC2上に探しに行きます。EC2に設定がなければMCPは使えません。
SSH Sessions中にMCPを使いたい場合は、EC2側の ~/.claude.json にMCPサーバーを設定する必要があります。ただし、Slackトークンなどの認証情報をEC2上に保存することになるので、セキュリティ面でのトレードオフが生じます。
ちなみに、もしこれが実現できたらかなり面白いユースケースが考えられます。たとえばSlackの #infra チャンネルで「本番EC2のディスク使用率がおかしい気がする」という会話が起きているとします。Claude Desktopに「このチャンネル(channel ID: Cxxxxxxx)のやり取りを確認して」と指示すると、Slack MCPでチャンネルの会話を読み取り → SSH越しに該当EC2で df -h を実行して確認 → 「調査結果をこのチャンネルに返信しますか?」とユーザーに確認、という一連のフローが組めます。
「Slack上のClaude(claude.ai Slack連携)」との違いはここです。Slack上のClaudeは会話のアドバイスはできますが、実際のサーバー状態を確認することはできません。SSH Sessions + Slack MCPなら「Slackの文脈を理解した上で、EC2を実際に調査して報告する」ところまでいけます。
Q: セッションを引き継げる?
SSH接続ではセッション引き継ぎ("Continue in another surface")は利用できません。 これは公式ドキュメントに明記されています。
つまり、SSH接続中のセッションを別のデバイスやウィンドウで引き継ぐことはできません。ローカル環境やRemote環境ではこの機能が使えるため、セッション引き継ぎが必要な場合はそちらを検討してください。
設定手順(ざっと流れを把握する)
Step 1: EC2の環境準備
EC2インスタンス(Ubuntu 22.04 LTS推奨、t3.medium以上)にSSH接続して、基本的な開発環境をセットアップします。Claude Code自体はインストール不要です。
# システムアップデート
$ sudo apt update
# 必要なパッケージ
$ sudo apt install -y curl git build-essential
# Node.js(プロジェクトで必要な場合)
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
$ nvm install --lts
セキュリティグループはSSH(ポート22)をローカルIPからのみ許可しておきましょう。
Step 2: SSH Configを設定
ローカルPCの ~/.ssh/config にEC2への接続設定を追加します。
Host ec2-dev
HostName <EC2のパブリックIP or DNS>
User ubuntu
IdentityFile ~/.ssh/your-key.pem
ServerAliveInterval 60
ServerAliveCountMax 3
ServerAliveInterval と ServerAliveCountMax はキープアライブの設定です。SSH接続が長時間のアイドルで切断されるのを防ぎます。
Step 3: Claude Code DesktopでSSH接続設定
Claude Code Desktopを開き、SSH接続を追加します。
![IMAGE: Claude Code Desktopの設定画面で「+ Add SSH connection」をクリック]
- 設定画面の「+ Add SSH connection」をクリック
- Host名(ec2-dev)を入力
- Identity Fileのパスを設定
- 「リモートフォルダの選択」ダイアログが出たら
/home/ubuntuを指定
![IMAGE: SSH接続成功後、ステータスバーに「SSH: ec2-dev」と表示されている画面]
ステータスバーに「SSH: ec2-dev」と表示されれば接続成功です。
試しに「このセッションはどこで実行されていますか?」と聞いてみてください。EC2のホスト名が返ってくれば確認完了です。
やってみた
SSH接続が確立できたら、実際にいくつか試してみましょう。
環境を確認する
「このセッションはどこで実行されていますか?実行環境の詳細を教えてください。」と聞いてみます。
するとClaude Desktopが自動的にいくつかのコマンドを実行して、こんな回答を返してくれました。
$ uname -a
Linux ip-172-31-17-76 6.8.0-1046-aws #49~22.04.1-Ubuntu SMP Mon Feb 2 16:17:58 UTC 2026 x86_64
$ nproc && free -h
2
total used free available
Mem: 3.7Gi 575Mi 1.8Gi 2.9Gi
$ whoami
ubuntu
きちんとEC2のホスト名・スペックが返ってきました。モデルも「Claude Opus 4.6」と表示されています。EC2上でコマンドが走っていることが確認できます。
ちなみに接続直後に Gathered system information: Ubuntu 22.04, 2 CPU cores, 3.7GB RAM available というメッセージが自動表示されました。Claude Desktopが接続時に環境情報を先読みしているようです。
ファイルを作ってみる
「test.txtファイルを作成して、現在のホスト名と日時を記録してください。」と指示してみます。
$ hostname && date '+%Y-%m-%d %H:%M:%S %Z'
ip-172-31-17-76
2026-03-03 03:10:15 UTC
作成された /home/ubuntu/test.txt の内容:
Hostname: ip-172-31-17-76
Date: 2026-03-03 03:10:15 UTC
無事、EC2上にファイルが作成されました。興味深かったのは、hostname > test.txt のようなシェルリダイレクトではなく、コマンドを実行して結果を取得した後にWrite APIでファイルを書き込む、という方式をClaudeが選んだ点です。
EC2のメタデータを取得する
「AWSのリージョン情報を取得してください。」と聞いてみます。
AWS CLIではなくIMDS(Instance Metadata Service)を使って取得してくれました。
$ TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600") && \
curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \
http://169.254.169.254/latest/meta-data/placement/region
ap-northeast-1
| 項目 | 値 |
|---|---|
| リージョン | ap-northeast-1(東京) |
| アベイラビリティゾーン | ap-northeast-1c |
IAMロールがなくても、IMDSv2経由でEC2自身のメタデータは取得できます。EC2上で動いているからこそできることですね。
使い分けのポイント
最後に、3つの環境をどう使い分けるか、判断基準をまとめます。
- 本番環境のAWSリソースを操作したい → SSH(IAMロールで安全にアクセス)
- 長時間かかるタスクでPCを閉じたい → Remote(バックグラウンド継続)
- MCP Connectorsを使いたい → LocalまたはSSH(SSHはEC2側への設定が必要)
- AWSのAPIキーをローカルに置きたくない → SSH(EC2のIAMロールで認証)
- 普段の開発作業 → Local(最もシンプル)
これらは排他的ではないので、作業内容に応じて切り替えて使うのがベストです。
まとめ
Claude Code DesktopのSSH Sessions機能について、実際に試して確認したポイントを整理しました。
EC2にClaude Codeは不要
EC2はあくまでコマンド実行の場所であり、Claude Code CLIのインストールは必要ありません。git や Python など、プロジェクトで使うツールだけ入れておけば十分です。
MCP設定はEC2側に必要
Claude Desktopチャットで設定したMCPは、SSH Sessions中には一切引き継がれません。作業環境がEC2になった瞬間に、設定ファイルの参照先もEC2側に切り替わります。
そして、、、
SSH SessionsはSSHキー前提という制約がある
aws login(ブラウザ認証)やSession Managerなどのキーレスアクセスが主流になりつつある中、SSH Sessionsは従来型のSSHキー管理が前提です。MCP設定の認証情報をEC2に置く問題も含め、セキュリティ面での課題はまだ残ります。Claude Code Desktopがキーレス認証に対応してくれると、より使いやすくなりますね。今後のアップデートに期待、ですね。
どうぞ参考にしてみてください。







