SSH 経由のリモートワーク
接続の詳細はプロジェクトフォルダの ssh.md にあります。リモートセッションの前には必ずこれを読んでください。ホスト、ユーザー、ポート、鍵のパス、パスワードを推測しないでください。
アクティベートするタイミング
- ユーザーがリモートマシンに接続、ログイン、または何かを実行するよう依頼した場合
- ユーザーがリモートプロジェクトの確認、編集、ビルド、テストを依頼した場合
- ユーザーがサーバー、VPS、リモートホストに言及し、SSH アクセスを期待している場合
ステップ 1: ssh.md を見つける
プロジェクトフォルダは git rev-parse --show-toplevel で取得し、失敗した場合はカレントディレクトリを使用します。ssh.md は常に <プロジェクトフォルダ>/ssh.md にあります。
もし存在しない場合は、テンプレートから作成し、ユーザーに記入するよう伝えます:
ssh.example.mdを見つけます。これはこのスキルのフォルダにあり、エージェントに依存します。以下のパスを順にチェックし、最初に存在するものを使ってください:.agents/skills/remote-work-ssh/、.claude/skills/remote-work-ssh/、.opencode/skills/remote-work-ssh/、~/.agents/skills/remote-work-ssh/、~/.claude/skills/remote-work-ssh/、~/.config/opencode/skills/remote-work-ssh/。どれも存在しない場合はfind ~ -path '*remote-work-ssh*' -name ssh.example.md 2>/dev/null | head -n 1を実行します。- それを
<プロジェクトフォルダ>/ssh.mdにコピーします。 - 不足している場合は
ssh.mdをプロジェクトの.gitignoreに追加します。必要に応じて.gitignoreを作成します。 - 停止し、ユーザーに
ssh.mdを記入するよう伝えます。
ステップ 2: 設定の検証
ssh.md には 1 つの YAML ブロックが含まれています。以下のフィールドを確認してください:
authはalias、key、またはpasswordである必要があります。remote_project_pathが設定されている必要があります。- 選択した方式に必要なフィールドが設定されている必要があります:
auth | 必須フィールド |
|---|---|
alias | alias |
key | host、user、identity_file(port のデフォルトは 22) |
password | host、user、password_env(port のデフォルトは 22) |
必須フィールドが欠けている場合、または auth が不明な場合は、停止してどのフィールドが間違っているかを正確に報告してください。他の方式にフォールバックしないでください。
ステップ 3: 接続
alias
まずエントリを解決し、次に接続します:
ssh -G <alias> | grep -E '^(hostname|user|port) '
ssh -o BatchMode=yes <alias> 'hostname && whoami'
key
identity_fileが存在することを確認します。存在しない場合は停止します。- その鍵のみを使用します:
ssh -o BatchMode=yes -o IdentitiesOnly=yes -i <identity_file> -p <port> <user>@<host> 'hostname && whoami'
proxy_jumpが設定されている場合は、-J <proxy_jump>を追加します。
password
command -v sshpassでsshpassがインストールされているか確認します。ない場合は停止し、ユーザーにインストールを促します。password_envで指定された環境変数が設定されているかを、その値を出力せずに確認します。SSHPASS環境変数と-eオプションを介してsshpassに値を渡します。パスワードをコマンドライン引数や出力に含めないでください。- 鍵ベースの試行を無効にして、パスワードのみを使用するようにします:
SSHPASS="$(printenv <password_env>)" sshpass -e ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password -p <port> <user>@<host> 'hostname && whoami'
proxy_jumpが設定されている場合は、-J <proxy_jump>を追加します。- ここでは
BatchMode=yesを使用しないでください。パスワード認証が無効になるからです。
ホスト鍵(すべての方式)
- ホスト鍵が不明または変更されている場合は、停止します。指紋を表示し、ユーザーに確認を求めます。
StrictHostKeyChecking=noや、検証をスキップする類似のオプションを設定しないでください。
ステップ 4: リモートプロジェクトで作業する
- すべてのコマンドを
remote_project_path内で実行します。例:ssh ... 'cd <remote_project_path> && <command>'。パスは引用符で囲みます。 - リモートマシンにツールが存在することを前提とする前に、そのマニフェストを確認するか
command -v <ツール>を実行します。 - ユーザーが依頼しない限り、
remote_project_pathの外に書き込まないでください。
セーフティルール
rm -rf、強制プッシュ、データベース削除、ディスク操作、サービス再起動などの破壊的なコマンドの前に確認を求めます。- パスワード、鍵の内容、トークンを決して出力、コピー、ログ、コミットしないでください。
- 認証情報をプロジェクトの
ssh.mdまたは環境以外のファイルに保存しないでください。 - ユーザーが依頼していないコマンドをリモートマシンで実行しないでください。
サポート外の操作
- 追跡対象ファイルやこのスキルへのパスワードの保存
- ユーザーに代わってのインタラクティブな MFA やワンタイムコードの処理
- ホスト鍵検証の無効化
ssh.mdで定義されていないホストへの接続