huawei-cloud-ascend-remote-connect について
リモートサーバーやNPUを管理するユーザー向けに、Huawei Cloud Ascendマシンへの一時的なSSH接続を提供するPythonスキルです。複数ホストの同時セッションに対応し、コマンド検証、危険操作の確認、パスワードのメモリ内管理を備えます。
主な機能
- 01複数ホストへの同時SSHセッション
- 02npu-smiによるAscend NPU監視
- 03再利用可能な接続プール
- 04危険なコマンドの検証と確認
- 05セッション中のみの認証情報保持
活用シーン
- 01AscendマシンのNPU状態確認
- 02リモートサーバーでのシステムチェック
- 03複数のSSH接続先の管理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ huaweicloud/ huaweicloud-skills --skill huawei-cloud-ascend-remote-connectインストール後、Claude Code で/huawei-cloud-ascend-remote-connectを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/iam-policies.mdtroubleshooting.mdverification-method.mdscripts/__init__.pycommand_validator.pyexecutor.pymain.pysession_manager.pyssh_client.py詳細
Huawei Cloud Ascend リモート接続
概要
Huawei Cloud Ascend デバイスへの一時的な SSH リモート接続機能を提供します。複数のマシンへの同時接続に対応しています。すべての機密性の高い操作(削除、変更、移動など)は、実行前にユーザーの確認が必要です。パスワードはメモリ内にのみ保存され、セッション終了後に破棄されます。
アーキテクチャ
システムアーキテクチャ図
┌─────────────────────────────────────────────────────────────────────┐
│ User Interaction Layer │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Natural Language Commands / CLI Arguments │ │
│ │ (connect, execute, monitor, disconnect) │ │
│ └────────────────────────────┬────────────────────────────────┘ │
│ │ │
│ ▼ │
├────────────────────────────────┼─────────────────────────────────────┤
│ Skill Core Components │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Session Manager │←→│ Command Executor│←→│ SSH Client │ │
│ │ - Connection │ │ - NL Parsing │ │ - paramiko │ │
│ │ - Pooling │ │ - Validation │ │ - ControlMaster│ │
│ │ - Timeout Mgmt │ │ - Execution │ │ - Key/Cert Auth│ │
│ └─────────────────┘ └─────────────────┘ └────────┬────────┘ │
│ │ │ │ │
│ │ │ ▼ │
│ │ │ ┌─────────────────┐ │
│ │ │ │ Command Validator│ │
│ │ │ │ - Blocked Cmds │ │
│ │ │ │ - Confirm Req │ │
│ │ │ └─────────────────┘ │
│ │ │ │
│ ▼ ▼ │
├────────────────────────────────┼─────────────────────────────────────┤
│ Huawei Cloud Ascend Infrastructure │
│ (Remote Target Servers) │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Ascend NPU │ │ OS Services │ │ Containers │ │
│ │ - npu-smi │ │ - systemctl │ │ - docker │ │
│ │ - Driver │ │ - journalctl │ │ - k8s │ │
│ │ - FW Upgrade │ │ - Network Mgmt │ │ - Pods │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
│ Data Flow: User → Skill → SSH Tunnel → Target Server → Response │
└─────────────────────────────────────────────────────────────────────┘
コンポーネントの関係
| コンポーネント | 責務 | 主な機能 |
|---|---|---|
| セッションマネージャー | SSH 接続を管理する | 接続プーリング、タイムアウト管理、ライフサイクル制御 |
| コマンド実行ツール | ユーザーコマンドを処理する | 自然言語解析、コマンドルーティング、結果のフォーマット |
| SSH クライアント | セキュアなトンネルを確立する | paramiko 統合、ControlMaster、認証 |
| コマンドバリデーター | セキュリティを適用する | ブロック対象コマンドの一覧、確認要件 |
クラウドサービスとの統合
- Ascend NPU 管理:監視と管理のために npu-smi に直接アクセスします
- Huawei Cloud インフラストラクチャ:クラウドサーバーとコンテナーへのセキュアな SSH アクセス
- セキュリティコンプライアンス:認証情報をメモリ内にのみ保存し、セッションを分離します
前提条件
システム要件
- Python 3.8+
- paramiko >= 3.4.0
環境の確認
前提条件の確認:Python3 + paramiko が必要です
python3 --version # Python3 >= 3.8 python3 -c "import paramiko; print('OK')" # SSHライブラリインストールされていない場合:
pip3 install --user paramiko cryptography
認証
セキュリティルール(必ず遵守してください):
- パスワードの値を読み取ったり、エコーしたり、出力したりすることは禁止されています
- 会話内でユーザーにパスワードを直接入力するよう求めることは禁止されています
- コマンドライン引数から認証情報を読み取ることのみ許可されています
パラメーターの確認
入力パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
| host | はい | 接続先サーバーの IP アドレス |
| port | いいえ | SSH ポート(デフォルト:22) |
| user | はい | SSH ユーザー名 |
| password | はい | SSH パスワード |
パラメーターの検証
- IP アドレス形式:IPv4(例:192.168.1.100)
- ポート範囲:1-65535
- ユーザー名:英数字とアンダースコア
- パスワード:空でない文字列
確認が必要な操作
次の操作には、ユーザーによる明示的な確認が必要です。
- 削除:rm、rmdir
- フォーマット:mkfs、fdisk -d、parted rm
- マウント解除:umount
- 再起動:reboot、shutdown、init 6
- シャットダウン:poweroff、halt、init 0
- ユーザーの削除:userdel、groupdel
- 権限の変更:chmod -R、chown -R
IAM 権限ポリシー
接続先サーバーで SSH サービスが有効になっており、提供された認証情報に適切な権限があることを確認してください。
接続先サーバーで最低限必要な権限:
- SSH アクセス(ポート 22 またはカスタムポート)
- システム管理操作に必要な sudo 権限
コアワークフロー
タスク 1:SSH 接続の確立
python3 scripts/main.py --host <ascend-server-ip> --port 22 --user root --password <your-password> --command "npu-smi info"
タスク 2:対話モード
python3 scripts/main.py
使用方法
Ascend サーバーへの接続
SSH connect to 192.168.1.100 port 22 as root with password xxx
コマンドの実行
NPU の監視
npu-smi info
Check NPU status
NPU health check
システム管理
Check CPU and memory
df -h
top -bn1
接続管理
Show current connections
Switch to 192.168.1.101
Disconnect SSH
出力形式
標準応答形式
すべてのコマンド出力は、構造化された形式に従います。
┌─────────────────────────────────────────┐
│ Target: <host>:<port> │
│ Command: <executed-command> │
│ Exit Code: <0-success/non-zero-fail> │
├─────────────────────────────────────────┤
│ STDOUT: │
│ <command-output> │
├─────────────────────────────────────────┤
│ STDERR: │
│ <error-output> │
├─────────────────────────────────────────┤
│ Duration: <seconds>s │
└─────────────────────────────────────────┘
エラー応答形式
[ERROR] <error-code>
Message: <error-description>
Suggestion: <troubleshooting-tip>
成功の指標
- 終了コード:0
- STDOUT:想定される出力を含みます
- STDERR:空、または警告のみを含みます
検証方法
基本的な検証手順
-
環境の確認
python3 --version # Verify Python 3.8+ python3 -c "import paramiko" # Verify paramiko installed -
接続テスト
python3 scripts/main.py --host <test-ip> --port 22 --user root --password <test-pwd> --command "echo test" -
NPU 監視テスト
python3 scripts/main.py --host <ascend-ip> --user root --password <pwd> --command "npu-smi info"
期待される結果
| テストケース | 期待される出力 |
|---|---|
| 環境の確認 | Python のバージョンが 3.8 以上で、paramiko のインポートに成功する |
| 接続テスト | 終了コード 0、stdout に「test」が含まれる |
| NPU 情報 | NPU デバイス情報が表示される |
詳しい検証手順については、references/verification-method.md を参照してください。
スクリプトファイル
エントリーファイル
- main.py:スキルのエントリーファイル(必須)
- 機能:対話型メニューを提供し、統一されたエントリーポイントとなります
- メニュー項目:
- SSH 接続を確立
- コマンドを実行
- 切断
コアスクリプト
-
executor.py:コマンド実行ツール(メインエントリー)
- 機能:ユーザー入力を解析し、対応するハンドラーにコマンドを振り分けます
- コアメソッド:
handle_command(text):コマンド振り分けのエントリー_connect(info):SSH 接続を確立_detect_disks():未マウントのディスクを検出_handle_auto_mount(text):起動時の自動マウントを設定_confirm_disk_merge(info):ディスク結合を確認
-
session_manager.py:セッションマネージャー
- 機能:複数の SSH セッションを同時に管理します
- コアメソッド:
create_session(host, port, username, password):新しいセッションを作成execute_command(command):アクティブなセッションでコマンドを実行switch_session(host):指定したホストのセッションに切り替えclose_session():現在のセッションを閉じるget_session_info():すべてのセッション情報を取得
-
ssh_client.py:SSH クライアント
- 機能:低レベルの SSH 接続を実装し、パスワード認証と鍵認証に対応します
- コアメソッド:
connect():SSH 接続を確立exec_command(command):リモートコマンドを実行close():接続を閉じる
-
command_validator.py:コマンドバリデーター
- 機能:危険なコマンドをフィルタリングするセキュリティレイヤー
- 検証ルール:
- ブロックリスト:直接ブロックします(例:フォークボム)
- 要確認:確認を求めます(例:rm -rf、reboot)
- 許可リスト:そのまま実行します(例:ls、cat、df)
対応機能
NPU 管理
- NPU の状態監視(npu-smi)
- NPU のヘルスチェック
- NPU 設定の表示
ディスク管理
- ディスクの検出
- LVM の結合
- パーティションのマウント
- 起動時の自動マウント
- ディスクのヘルスチェック
- 空き容量の確認
システム管理
- CPU/メモリ/ディスクの監視
- システムの更新
- ユーザー/権限の管理
- Cron ジョブの管理
ネットワーク管理
- ポートスキャン
- ファイアウォールの設定
- ルートの表示
- ネットワークインターフェースの設定
- DNS のトラブルシューティング
コンテナー管理
- Docker のインストールと管理
- イメージ管理
- コンテナー管理
- ログの表示
- Docker Compose の操作
セキュリティ管理
- ログイン監査
- SSH 鍵の管理
- 高リスクコマンドのブロック
ログ管理
- システムログ
- アプリケーションログの分析
- エラーのトラブルシューティング
ファイル操作
- アップロード/ダウンロード
- コピー/転送
- 権限の変更
- 作成/削除
接続プール管理
機能
- 接続の再利用:同じ接続先には同じ接続を再利用し、ハンドシェイクの繰り返しを回避します
- 自動切断:10 分間アイドル状態が続くと自動的に切断します(設定可能)
- スレッドセーフ:複数スレッドからの同時アクセスに対応します
- 状態の確認:接続プールの状態とアイドル時間を確認できます
保護メカニズム
- 最大接続数の制限:デフォルトは 50 で、複数の接続先に対応します
- リクエストレート制限:デフォルトの最大同時リクエスト数は 200 です
- 接続タイムアウト:デフォルトは 10 秒です
- 実行タイムアウト:デフォルトは 60 秒です
- ヘルスチェック:30 秒ごとに接続状態を確認し、異常な接続を自動的に切断します
# Using connection pool
from ssh_client import get_pool
pool = get_pool()
result = pool.execute(conn_info, 'ls -la')
# View pool status (includes statistics)
status = pool.get_pool_status()
# {
# 'connections': [...],
# 'total_connections': 2,
# 'max_connections': 10,
# 'max_concurrent_requests': 5,
# 'statistics': {'total_requests': 100, 'failed_requests': 2, ...}
# }
# Configure protection parameters
pool.configure(
max_connections=20, # Max connections
max_concurrent_requests=10, # Max concurrent requests
idle_timeout=300, # Idle timeout (seconds)
connect_timeout=15, # Connection timeout (seconds)
execute_timeout=120 # Execute timeout (seconds)
)
複数マシンへの接続
IP アドレスで区別し、複数のマシンに同時に接続できます:
SSH connect to 192.168.1.100 port 22 as root with password xxx
SSH connect to 192.168.1.101 port 2222 as admin with password yyy
接続先の切り替え
Switch to 192.168.1.101
現在の接続を表示
View current connections
セキュリティメカニズム
機密操作の確認
以下の操作にはユーザーの確認が必要です:
- 削除:rm、rmdir
- フォーマット:mkfs、fdisk -d、parted rm
- アンマウント:umount
- 再起動:reboot、shutdown、init 6
- シャットダウン:poweroff、halt、init 0
- ユーザーの削除:userdel、groupdel
- 権限の変更:chmod -R、chown -R
高リスクコマンドのブロック
以下のコマンドはデフォルトでブロックされます:
:(){ :|:& };:(フォークボム)- ディスクを直接フォーマットするコマンド
パスワードのセキュリティ
- パスワードはメモリ内にのみ保存されます
- セッション終了後、直ちに消去されます
- 設定ファイルやログには書き込まれません
ベストプラクティス
接続管理
- 接続の再利用:接続プールは既存の接続を自動的に再利用します
- タイムアウトの設定:ネットワーク状況に応じてタイムアウトを調整します
- アイドルタイムアウト:デフォルトは10分です。頻繁に切断される場合は、より短く設定してください
セキュリティに関する推奨事項
- 鍵認証を使用する:可能な場合は、パスワードより SSH キーを優先してください
- 権限を制限する:必要最小限の sudo 権限を付与してください
- セッションを監視する:アクティブな接続を定期的に確認してください
- ログを監査する:ログインログを定期的に確認してください
パフォーマンスの最適化
- コマンドをまとめる:関連するコマンドをまとめ、接続のオーバーヘッドを減らします
- 接続プールを調整する:同時接続の必要数に応じてプールのサイズを調整します
- コマンドのタイムアウト:実行時間の長いコマンドには適切なタイムアウト値を設定します
注意事項
セキュリティに関する警告
⚠️ 認証情報の取り扱い:
- パスワードをログに記録したり、表示したりしないでください
- 使用後は認証情報をメモリから消去してください
- 本番環境では SSH キーを使用してください
⚠️ 高リスク操作:
- 破壊的な操作(rm、mkfs、reboot)は必ず確認してください
- ブロックされたコマンドを回避することはできません
- デプロイ前にセキュリティの仕組みを確認してください
よくある問題
| 問題 | 原因 | 解決策 |
|---|---|---|
| 接続がタイムアウトする | ネットワーク/ファイアウォール | ネットワーク接続を確認する |
| 認証に失敗する | 認証情報が正しくない | ユーザー名/パスワードを確認する |
| コマンドがブロックされる | セキュリティポリシー | コマンドバリデーターのルールを確認する |
| プールが枯渇する | 接続数が多すぎる | max_connections を増やす |
制限事項
- SSH パスワード認証のみ(対話型のパスワードプロンプトには非対応)
- 接続ごとに単一ユーザーのセッション
- 同時接続は最大50件(設定可能)
トラブルシューティング
接続に失敗する場合
- IP アドレスとポートが正しいか確認してください
- ファイアウォールでポートが許可されているか確認してください
- ユーザー名とパスワードが正しいか確認してください
- 接続先ホストで SSH サービスが実行中か確認してください
コマンドの実行に失敗する場合
- コマンドの構文が正しいか確認してください
- アクティブな接続があるか確認してください
- コマンドがセキュリティポリシーによってブロックされていないか確認してください
ディスクのマージに失敗する場合
- ディスクが他のプロセスに使用されていないか確認してください
- LVM ツールがインストールされているか確認してください
- ディスクがすでにマウントされていないか確認してください
ディレクトリ構成
huawei-cloud-ascend-remote-connect/
├── SKILL.md # Skill definition entry file (required)
├── scripts/ # Scripts directory (required)
│ ├── __init__.py # Module export
│ ├── main.py # Skill entry script (required)
│ ├── executor.py # Command executor
│ ├── session_manager.py # Session manager
│ ├── ssh_client.py # SSH client implementation
│ └── command_validator.py # Command validator
└── references/ # Reference documentation directory
├── troubleshooting.md # Troubleshooting guide
├── verification-method.md # Verification steps
└── iam-policies.md # IAM policies
参考資料
| ドキュメント | 説明 |
|---|---|
| references/troubleshooting.md | トラブルシューティングガイド |
| references/verification-method.md | 検証手順 |
| scripts/main.py | メインのエントリースクリプト |
作成者:huawei-cloud