一键导入
kb-ec2-ssm
EC2 + SSM Session Manager の構築・運用ナレッジ。Claude Code on EC2、VSCode Remote-SSH、tmux永続化、CDK User Data等
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
EC2 + SSM Session Manager の構築・運用ナレッジ。Claude Code on EC2、VSCode Remote-SSH、tmux永続化、CDK User Data等
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Tavily APIキーの残りクレジットを確認(.envから取得)。※アプリの利用統計は /check-app-stats を使用
ローカルのマージ済みGitブランチを整理・削除する
リポジトリ内の未プッシュの変更をすべて確認し、適切なコミットに分割してコミット&プッシュする
1Password CLI(op コマンド)のナレッジ。.env.op テンプレートから .env 生成、op-sync、Touch ID最小化、Vault構成、アカウント切替等
AgentCore CDK・デプロイ・ランタイム統合のナレッジ。Runtime作成、JWT認証、SSE、Dockerfile、コンテナ管理、Browser Tool等
AgentCore Identity(アウトバウンド認証)のナレッジ。3LO/M2M/デコレータ分離/callback等
| name | kb-ec2-ssm |
| description | EC2 + SSM Session Manager の構築・運用ナレッジ。Claude Code on EC2、VSCode Remote-SSH、tmux永続化、CDK User Data等 |
| user-invocable | true |
| model | sonnet |
EC2上でClaude Codeを常時稼働させる構成(claude-on-ec2)の構築・運用で得た知見。
ProxyCommand は 必ず1行で書く。複数行(バックスラッシュ改行)はVSCodeが Unexpected line break エラーを出す。
# NG: 複数行(VSCodeで失敗する)
Host claude-ec2
ProxyCommand aws ssm start-session \
--target %h \
--document-name AWS-StartSSHSession \
...
# OK: 1行
Host claude-ec2
HostName <インスタンスID>
User ec2-user
StrictHostKeyChecking accept-new
ProxyCommand aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters portNumber=%p --profile <profile> --region <region>
EC2に AWS-StartSSHSession 経由でSSH接続する場合、EC2側の ~/.ssh/authorized_keys にクライアント公開鍵の登録が必要。SSM send-command で行う。
# 1. 公開鍵がなければ生成
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" -C "macbook-name"
# 2. SSM send-command で EC2 の authorized_keys に登録
PUBKEY=$(cat ~/.ssh/id_ed25519.pub)
aws ssm send-command \
--instance-id <インスタンスID> \
--document-name "AWS-RunShellScript" \
--parameters "commands=[\"mkdir -p /home/ec2-user/.ssh && echo '$PUBKEY' >> /home/ec2-user/.ssh/authorized_keys && chmod 600 /home/ec2-user/.ssh/authorized_keys && chown ec2-user:ec2-user /home/ec2-user/.ssh/authorized_keys\"]" \
--profile <profile> --region <region>
# 3. 接続テスト
ssh -o BatchMode=yes <Host名> echo ok
| エラー | 原因 | 解決策 |
|---|---|---|
Unexpected line break at aws ssm | ProxyCommandが複数行 | 1行にまとめる |
Host key verification failed. | known_hostsに未登録 | StrictHostKeyChecking accept-new を設定に追加 |
Permission denied (publickey) | authorized_keysに公開鍵なし | SSM send-commandで公開鍵を登録 |
SessionManagerPlugin is not found | プラグイン未インストール | brew install --cask session-manager-plugin |
claudeなどのプロセスが終了しても自動で再起動する仕組み:
tmux new-session -d -s <セッション名> -x 220 -y 50
tmux set-option -t <セッション名> remain-on-exit on
tmux set-hook -t <セッション名> pane-died "respawn-pane -k -t <セッション名>"
tmux send-keys -t <セッション名> "cd ~ && <起動コマンド>" Enter
| 設定 | 効果 |
|---|---|
remain-on-exit on | プロセス終了後もペインを残す(dead状態) |
pane-died フック | ペインがdead状態になったときに発火 |
respawn-pane -k | deadペインを強制的に再起動 |
TypeScript配列を .join('\n') で結合してheredocを生成すると、シェバン行 #!/bin/bash が #\!/bin/bash に文字化けすることがある。
確認方法:
xxd /usr/local/bin/スクリプト名.sh | head -1
# 2321 が正常(#!/)、235c21 が文字化け(#\!)
結果: systemd が Exec format error (status=203) でスクリプトを実行できない。
対処: EC2上で直接 cat > /path/to/script.sh << 'EOF' ... EOF で書き直す。
CDKでUser Dataを更新して cdk deploy しても EC2 が停止→起動されるだけで再実行されない。
変更を反映させるには cloud-init clean で強制再実行が必要。
sudo cloud-init clean --logs
sudo cloud-init init
sudo cloud-init modules --mode config
sudo cloud-init modules --mode final
Error: Workspace not trusted. Please run `claude` in / first...
/(ルート)など信頼されていないディレクトリで claude や claude remote-control を起動すると発生。
起動スクリプトに cd /home/ec2-user && を先頭に追加して回避する。
Claude Code プロンプトで /config を実行し、「すべてのセッションでリモートコントロールを有効にする」を true に設定。
以降は claude を起動するだけで自動的に Remote Control が有効になる。
/etc/systemd/system/claude-code.service
↓ EC2起動時に実行
/usr/local/bin/claude-autostart.sh
↓ tmuxセッション「claude」を作成(remain-on-exit設定込み)
↓ tmux内で claude を起動
Remote Control が自動有効化(/config 設定済みの場合)
↓
スマホ・ブラウザから claude.ai/code で接続可能
SSMセッション内でさらに tmux attach しようとすると:
sessions should be nested with care, unset $TMUX to force
これはすでにtmux内にいることを示す正常なメッセージ。Ctrl+B, D でデタッチすれば OK。
EC2上のClaude Codeに接続するときの手順:
aws sts get-caller-identity --profile sandbox を実行する。
aws sso login --profile sandbox」と表示して終了するSSMセッションはインタラクティブなため、Bashツールでは実行できない。 代わりに以下をそのままコピペしやすい形で出力する:
# ターミナルで実行してください
aws ssm start-session --target i-02493e718117e1af0 --profile sandbox --region us-east-1
# 接続後↓
sudo su - ec2-user
# → 自動で tmux にアタッチされて Claude Code が使えます
最後に一言添える:「Mac を閉じても tmux がデタッチされるだけでセッションは継続します。スマホの Claude アプリからそのまま続きができます。」
gh auth login)read:org スコープ不足エラーEC2 上で gh auth login に PAT を貼り付けると以下のエラーが出ることがある:
error validating token: missing required scope 'read:org'
原因: PAT に read:org スコープが付与されていない。
必要なスコープ(Classic PAT):
reporead:orggistworkflow対処手順:
Private/GitHub PAT を新しいトークンで更新gh auth login を再実行してトークンを貼り付けスコープを変更しても既存のトークン文字列は変わらないため、Regenerate または Delete → 新規発行を行うこと。
/tmp/tmux-<uid>/ にソケットファイルが残骸として残っているがサーバーは起動していない状態だと、tmux has-session がエラーを返して自動起動スクリプトが誤動作することがある。
# スクリプト冒頭でクリーンアップ
tmux kill-server 2>/dev/null || true
sleep 0.5