remote-systems-administration について
Unix 系ホストを管理する運用担当者向けに、SSH、Ansible、Paramikoを使ったリモート管理の判断手順を提供します。変更前にプラットフォームと制御系を確認し、範囲を限定して、ロールバック可能な操作を検証する方針です。
主な機能
- 01OS と制御系の特定
- 02作業に応じた SSH、Ansible、Paramiko の選択
- 03変更前のロールバックと復旧経路の確認
- 04事前確認と検証による操作範囲の制限
- 05ホストごとの結果と不確実性の記録
活用シーン
- 01単一のリモートホストの診断
- 02複数ホストへの反復的な設定適用
- 03Python による SSH または SFTP の連携
- 04ネットワークやファイアウォールの安全な変更
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ magnus919/ agent-skills --skill remote-systems-administrationインストール後、Claude Code で/remote-systems-administrationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdevals/evals.jsonreferences/ansible-administration-and-safety.mdansible-runbooks-and-advanced-operations.mdansible.mdfleet-automation.mdfreebsd.mdlinux-alpine.mdlinux-arch.mdlinux-debian-ubuntu.mdlinux-rhel-fedora.mdlinux-suse.mdlinux.mdmacos.mdnetbsd.mdopenbsd.mdportable-operations.mdsafety-and-verification.mdsource-index.mdtemplates/remote-change-plan.md詳細
リモートシステムの管理
リモートコマンドを手当たり次第に実行するのではなく、運用上の意思決定レイヤーとして使用してください。Unix 系システムでは共通の用語が使われますが、実装は同じではありません。コマンドを選択する前に、対象のプラットフォームと現在有効な制御プレーンを特定してください。
運用上の契約
- 変更する前に調査する。 対象の識別情報、本番環境かどうか、OS とリリース、サービスマネージャー、パッケージマネージャー、ファイアウォール、アクセス経路、権限昇格の経路、現在の状態を記録します。ホスト名、記憶、インベントリのラベルから推測しないでください。
- 有効な制御プレーンのうち、最小のものを使う。 範囲を限定した単一ホストのタスクにはネイティブの SSH を、フリート全体に繰り返し適用する望ましい状態には Ansible を、最初の 2 つでは実現できない SSH プロトコルの制御を Python プログラムが本当に必要とする場合に限り Paramiko を使用します。
- まずアクセスを保護する。 SSH、ルーティング、DNS、ファイアウォール、権限昇格、またはネットワークインターフェースを変更する前に、テスト済みのロールバックと 2 つ目の復旧経路を確保します。新しい経路が機能するまで、現在のセッションを維持してください。
- 事前確認し、範囲を限定し、検証する。 対象を限定します。利用可能な場合は、ネイティブの検証、ドライラン、差分、またはカナリアを使用します。その後、影響を受けるサービスと、ユーザーから見える境界を検証します。終了コードが 0 であることは、コマンドが実行されたことしか証明しません。
- 筋書きではなく証拠を報告する。 ホストごとの範囲を限定した結果として、対象、コマンドのカテゴリ、変更前後の証拠、失敗、ロールバックの状態、残る不確実性を保持します。シークレット、鍵、設定ファイル全体、または範囲を限定していないログを回答に貼り付けないでください。
references/portable-operations.md の共通分類プローブを実行し、該当する OS/ファミリーのオーバーレイを読み込んで、そのコマンドの事前確認を実行します。必要な事前確認と安全性ゲートを通過してから、変更コマンドを選択してください。
読み取り専用の調査結果の引き継ぎ
事前確認の後、この簡潔な形式を使用します。各項目には、観測した証拠に基づく内容だけを記入してください。それ以外の場合は unknown または not supplied と記入します。
- 対象と範囲:
- 観測されたプラットフォームと制御プレーン:
- 範囲を限定した証拠:
- 不明またはブロックされている事項:
- 次に行う安全な操作:
最初の応答:作業を分類する
| 状況 | 既定の経路 | 避けること |
|---|---|---|
| 1 台のホストを診断する、または範囲を限定した変更を 1 つ行う | 読み取り専用の事前確認と、範囲を限定したコマンド/対象範囲を用いるネイティブの ssh。tail -f のようなライブ追跡ストリームは使用しない | 対話型シェルを開いて、記録されない変更を行わない |
| 複数のホストに同じ望ましい状態を繰り返し適用する | Ansible のインベントリ + プレイブック、カナリア/シリアルロールアウト | 本番ホスト全体で ssh を無計画にループ実行しない |
| Python で SSH チャネル、SFTP、またはカスタムのプロトコルフローを調整する必要がある | ホストキーを厳格に検証し、タイムアウトを明示した Paramiko | ホストキーの確認を無効にしたり、スクリプトを場当たり的なフリート管理に使ったりしない |
| プラットフォーム/制御プレーンが不明 | references/portable-operations.md に従って、範囲を限定した調査を実行する | 推測に基づいて systemctl、apt、pfctl、または launchctl を使わない |
| 接続、ファイアウォール、認証、再起動、ストレージ、または削除に影響する変更 | まず references/safety-and-verification.md を読み込む | ロールバックと復旧経路を明確にする前に変更しない |
すべての変更操作で必須の事前確認
最初の状態変更コマンドを実行する前に、次の項目を確認してください。
- 正確なホスト、環境、および許可された範囲;
- OS/リリースと適用されるプラットフォームオーバーレイ;
- サービスマネージャー、パッケージマネージャー、ファイアウォールの実装、および設定の管理者;
- アクセスに使用する ID、権限昇格の方法、接続が踏み台を経由するかどうか;
- 目標とする状態、想定される影響範囲、ロールバックコマンドまたは成果物、および停止条件;
- コンポーネント層と関連する外部境界の両方での検証。
接続/アクセスの実行前ゲート: 承認、維持されたセッション、独立した復旧経路、テスト済みのロールバック、停止条件、コンポーネントと外部境界の検証を明示してください。いずれかが不明な場合は、実行前に停止してください。
読み取り専用の調査は、確認なしで進めてかまいません。読み取り専用とは、永続的な状態変更がないことを意味します: ロールバックスクリプトやキャプチャを作成したり、更新メタデータをステージングしたり、ファイルを変更したり、状態変更操作を preflight と呼んだりしないでください。必要なプラットフォームとコントロールプレーンの情報が確認できた時点で停止してください。破壊的な操作、権限の変更、ファイアウォール/リモートアクセスの変更、パッケージの削除、ストレージ操作、再起動/シャットダウンには、この事前確認後に明示的な指示が必要です。
参照先の案内
| 必要な内容 | 読み込む資料 | ファイル |
|---|---|---|
| SSH、POSIX 診断、出力の制限、ファイル転送、ログ、ホストの検出 | ポータブル運用 | references/portable-operations.md |
| Ansible の管理、インベントリ、ロール、コレクション、シークレット、リンティング、Molecule、ロールアウト、トラブルシューティング、またはプラットフォーム固有の自動化 | Ansible 管理 | references/ansible.md(索引 → ansible-administration-and-safety.md、ansible-runbooks-and-advanced-operations.md) |
| Paramiko、またはフリート制御方式と結果の記録要件の簡潔な比較 | フリート自動化 | references/fleet-automation.md |
| Linux の分類、init の検出、ファミリーをまたぐ安全性、不明または最小構成の派生ディストリビューション | Linux 分類 | references/linux.md |
| リリースと管理者の確認後の Debian、Ubuntu、または APT/dpkg ホスト | Debian/Ubuntu オーバーレイ | references/linux-debian-ubuntu.md |
| ベンダーのサポートとライフサイクルの確認後の RHEL、Fedora、または互換性のある RPM/DNF ホスト | RHEL/Fedora オーバーレイ | references/linux-rhel-fedora.md |
| トランザクショナルルートの確認を含む、SUSE、openSUSE、または zypper/RPM ホスト | SUSE オーバーレイ | references/linux-suse.md |
| サポート/リポジトリの確認後の Arch Linux、または Arch 派生の pacman ホスト | Arch オーバーレイ | references/linux-arch.md |
| 永続化モードの確認後の Alpine Linux、または apk/OpenRC ホスト | Alpine オーバーレイ | references/linux-alpine.md |
| FreeBSD の rc(8)、rc.conf、pkg、jails、pf/ipfw のルーティング | FreeBSD オーバーレイ | references/freebsd.md |
| NetBSD の rc.d、rc.conf、service、pkgsrc のルーティング | NetBSD オーバーレイ | references/netbsd.md |
| OpenBSD の rcctl、rc.conf.local、pkg_add、syspatch、pf | OpenBSD オーバーレイ | references/openbsd.md |
| launchd、softwareupdate、構成プロファイル、pf、macOS の運用上の制限 | macOS オーバーレイ | references/macos.md |
| 変更操作のゲート、安全クラス、ロールバック、検証の証拠 | 安全性と検証 | references/safety-and-verification.md |
| 一次資料とソースの鮮度 | ソース索引 | references/source-index.md |
プラットフォーム境界
プラットフォームごとの違いを均一化しないでください。
systemctlは BSD または macOS のサービスマネージャーではありません。rcctlは OpenBSD 固有です。FreeBSD では rc スクリプトとserviceを使用します。launchctlのドメインとラベルは systemd のユニットではありません。apt、dnf、pacman、pkg、pkg_add、softwareupdate、brewでは、更新、ロールバック、パッケージの取得元に関する仕様が異なります。- Linux の nftables、BSD の PF、macOS のアプリケーションファイアウォールは、それぞれ別のコントロールプレーンです。ルールを機械的に変換しないでください。
スコープの境界
このスキルは、ホストレベルの Unix 操作を対象とします。コンテナーは docker-compose、クラスターは kubernetes、暗号化されたテイルネットのポリシーは tailscale、検知/修復コンポーネントは crowdsec、信頼性に関するプロセス設計は site-reliability-engineering に振り分けてください。
認証情報の復旧、セキュリティ境界の回避、本番環境の削除、プロバイダーコンソールの操作、レビューされていないオペレーティングシステムのアップグレードは許可されません。
よくある落とし穴
- 適切なコマンドを誤ったプラットフォームで実行する。 操作を行う前に、サービス/パッケージ/ファイアウォールの管理ツールを確認してください。
- SSH 接続を権限の証明とみなす。 接続に成功しても、sudo ポリシー、ホストの識別情報、変更の実行権限が確認できたことにはなりません。
StrictHostKeyChecking=noや Paramiko のAutoAddPolicyを使用する。 未知のホストキーは、利便性のための確認事項ではなく、識別情報に関わる事象です。- 最初から並列化する。 まず 1 台のカナリアで手順を確立し、その後、停止条件を設けてバッチごとに展開してください。
- サービスが起動しただけで正常と判断する。 プロセス/ユニットの状態、ログ、リスニングエンドポイント、関連する依存先または外部境界を確認してください。
- パッケージのアップグレードと OS のアップグレードを混同する。 プラットフォームリリースのライフサイクル、カーネル/ベースシステムの更新、サードパーティ製パッケージには、それぞれ異なる手順があります。
- ロールバックなしにアクセス経路を変更してリモートホストを修復する。 有効なセッションと独立した復旧経路を確保してください。
検証チェックリスト
- 稼働中のホストから対象とプラットフォームを特定しました。
- 変更には明確な範囲、ロールバック、復旧経路が設定されていました。
- コントロールプレーンが対象プラットフォームと一致していました。
- フリート作業では、インベントリー、制限付きの同時実行数、停止条件を使用しました。
- 機密情報と上限のない出力を証跡から除外しました。
- 変更したコンポーネントと、関連する外部境界を検証しました。
- ホストごとの成功、失敗、ロールバックの状況を明示しました。