mcpField
R
remote-server-guide

remote-server-guide

github.com/ascend-ai-codingクラウド・DevOps17845 回インストール2 週間前に更新
リポジトリ

remote-server-guide について

特定のツールに依存せず、SSH によるリモートサーバー接続、コマンド実行、コンテナ管理を支援するスキルです。ツール選定からファイル転送、トラブル対応、後片付けまで扱います。

主な機能

  1. 01SSH 接続情報を収集
  2. 02認証方式と SSH ツールを選択
  3. 03ホストやコンテナでコマンドを実行
  4. 04SSH 経由でファイルを転送
  5. 05接続問題の診断とリソースの整理

活用シーン

  1. 01クラウド VM や開発マシンに接続
  2. 02リモート Docker コンテナ内でコマンドを実行
  3. 03リモートホストとファイルを送受信
  4. 04SSH 認証やネットワークの問題を診断

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ascend-ai-coding/awesome-ascend-skills --skill remote-server-guide

インストール後、Claude Code で/remote-server-guideを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

evals/
evals.json
references/
container-workflows.md
ssh-examples.md
tool-comparison.md
references/tools/
fabric-advanced.md
fabric-basic.md
paramiko-advanced.md
paramiko-basic.md
sshpass.md
tmux.md

詳細

リモートサーバーガイド

SSH を介してリモートサーバーに接続し、コマンドを実行して、コンテナを管理するワークフローです。このスキルは特定のツールに依存しません。目的に合った SSH ツールを選ぶ際に役立ち、接続からクリーンアップまでの全手順を案内します。

このスキルを使う場面

  • ユーザーがリモートサーバー(クラウド VM、オンプレミスサーバー、開発マシンなど)への接続を必要としている場合
  • ユーザーがリモートホストでコマンドを実行したい場合
  • ユーザーがリモートサーバー上の Docker コンテナに接続する必要がある場合
  • ユーザーがリモートサーバーとの間でファイルを転送したい場合
  • ユーザーが SSH 認証で問題を抱えている場合

認証方法

方法セキュリティ利便性最適な用途
SSH キー最高高本番環境、頻繁な利用
tmux(対話型)高(パスワードが AI に知られない)中一時的なアクセス、セキュリティを重視するユーザー
sshpass中(パスワードがコマンド内に含まれる)高簡単なスクリプト、信頼できる環境
paramiko/fabric中中Python による自動化

ワークフロー

フェーズ 1:接続情報の収集

接続する前に、ユーザーから次の情報を収集します。

  1. ホストアドレス(IP またはホスト名)
  2. SSH ポート(デフォルト:22)
  3. ユーザー名(例:root、ubuntu、user)
  4. 認証方法:
    • SSH キー(推奨)
    • パスワード(ツールの選択が必要です。フェーズ 2 を参照)
  5. ジャンプホスト(任意。踏み台/プロキシ構成の場合)
フェーズ 2:認証の設定
SSH キー(推奨)
ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no -i <key-path> <user>@<host> -p <port> "echo 'Connection successful'"
パスワード認証

ユーザーがパスワード認証を必要とする場合は、まず利用可能なツールを確認します。

which sshpass >/dev/null 2>&1 && echo "sshpass: available" || echo "sshpass: not found"
python3 -c "import paramiko" 2>/dev/null && echo "paramiko: available" || echo "paramiko: not found"
python3 -c "import fabric" 2>/dev/null && echo "fabric: available" || echo "fabric: not found"
which tmux >/dev/null 2>&1 && echo "tmux: available" || echo "tmux: not found"

ユーザーがパスワードのセキュリティを懸念している場合は、必ず tmux による対話型接続を推奨します。パスワードはユーザー自身が直接入力し、AI に知られることはありません。

ツール選択のガイド:

シナリオ推奨ツール理由
セキュリティを重視するユーザーtmuxパスワードが AI に知られない
一時的なアクセスtmux認証情報を保存する必要がない
簡単なシェルスクリプトsshpassシンプルで、依存関係がない
Python アプリケーションparamiko細かな制御が可能で、低レベル
デプロイの自動化fabric高レベル API で、コードがすっきりする
SFTP が必要paramiko または fabricサポートが組み込まれている
対話型ターミナルtmux または sshpassネイティブの TTY をサポート

利用可能なツールがない場合は、いずれかのインストールを提案します。

# tmux (Ubuntu/Debian)
sudo apt-get install -y tmux
# sshpass (Ubuntu/Debian)
sudo apt-get install -y sshpass
# paramiko
pip install paramiko
# fabric
pip install fabric
フェーズ 3:接続のテスト

次に進む前に、接続が機能することを確認します。

sshpass:

sshpass -p '<password>' ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no <user>@<host> -p <port> "echo 'Connection successful'"

tmux(対話型):

tmux new-session -d -s remote_session "ssh -o StrictHostKeyChecking=no <user>@<host> -p <port>"
# Tell user: "Please run: tmux attach -t remote_session and enter your password"
# After user confirms, verify:
tmux capture-pane -t remote_session -p

paramiko:

import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='<host>', port=<port>, username='<user>', password='<password>')
print('Connection successful')
client.close()

fabric:

from fabric import Connection
conn = Connection(host='<host>', user='<user>', connect_kwargs={'password': '<password>'})
conn.run('echo "Connection successful"', hide=True)
conn.close()

接続に失敗した場合は、次の点を確認します。

  • ホストアドレスとポートを確認する
  • 認証情報を確認する
  • ネットワーク/ファイアウォール/VPN を確認する
  • ジャンプホストの設定を確認する(使用している場合)
フェーズ 4:実行環境の選択

コマンドを実行する場所をユーザーに確認します。

  1. ホスト上で直接実行 — 最も一般的で、追加の設定は不要です
  2. 既存の Docker コンテナ内で実行 — 実行中のコンテナに接続します
  3. 新しい Docker コンテナ内で実行 — まずコンテナを作成します(専用のワークロードでは、NPU サーバー向けの npu-docker-launcher など、ハードウェア固有のスキルを検討してください)
既存のコンテナへの接続

重要:tmux と他のツールでは、コンテナ操作の挙動が大きく異なります。

tmux(永続セッション): 一度コンテナのシェルに入ったら、その後のコマンドはすべて直接送信でき、自動的にコンテナ内で実行されます。セッションでは状態(作業ディレクトリ、環境変数、シェルのコンテキスト)が維持されます。

# List containers
tmux send-keys -t remote_session "docker ps" Enter
tmux capture-pane -t remote_session -p

# Enter container ONCE — all subsequent commands run inside the container
tmux send-keys -t remote_session "docker exec -it <container-name> bash" Enter

# Now you are INSIDE the container — just send commands directly, no need to repeat docker exec
tmux send-keys -t remote_session "cd /workspace" Enter
tmux send-keys -t remote_session "python inference.py" Enter
tmux send-keys -t remote_session "cat result.txt" Enter
tmux capture-pane -t remote_session -p

# Exit container when done (returns to host shell)
tmux send-keys -t remote_session "exit" Enter

他のツール(ステートレス): 各コマンドは共有状態のない個別の SSH 接続になります。すべてのコマンドの前に docker exec を付ける必要があります。

# Every command needs the full docker exec prefix
ssh <user>@<host> "docker exec <container-name> ls /workspace"
ssh <user>@<host> "docker exec <container-name> python inference.py"
ssh <user>@<host> "docker exec <container-name> cat result.txt"
フェーズ 5:コマンドの実行

選択した SSH ツールを、すべての操作で一貫して使用します。

単一コマンド

tmux: tmux はシェルセッションを保持するため、コマンドを直接送信するだけです。以前にコンテナに入っている場合、コマンドはコンテナ内で実行されます。

tmux send-keys -t remote_session "<command>" Enter
tmux capture-pane -t remote_session -p

その他のツール(ステートレスで、各コマンドは独立しています):

ツールホスト上コンテナ内
SSH キーssh -i <key> <user>@<host> "<command>"ssh -i <key> <user>@<host> "docker exec <container> <command>"
sshpasssshpass -p '<pwd>' ssh <user>@<host> "<command>"sshpass -p '<pwd>' ssh <user>@<host> "docker exec <container> <command>"
paramikoclient.exec_command("<command>")client.exec_command("docker exec <container> <command>")
fabricconn.run("<command>")conn.run("docker exec <container> <command>")
ファイル転送
ツールアップロードダウンロード
scpscp <local> <user>@<host>:<remote>scp <user>@<host>:<remote> <local>
sshpass+scpsshpass -p '<pwd>' scp <local> <user>@<host>:<remote>sshpass -p '<pwd>' scp <user>@<host>:<remote> <local>
paramikosftp.put('local', 'remote')sftp.get('remote', 'local')
fabricconn.put('local', 'remote/')conn.get('remote', 'local')
複数ステップのスクリプト

複雑な操作では、スクリプトをアップロードして実行します。

# Upload script
scp setup.sh <user>@<host>:/tmp/
# Execute
ssh <user>@<host> "bash /tmp/setup.sh"
# Cleanup
ssh <user>@<host> "rm /tmp/setup.sh"
フェーズ 6:クリーンアップ

作業が終わったら、リソースをクリーンアップします。

  • SSH 接続を閉じます(client.close()、conn.close())
  • tmux セッションを終了します(tmux kill-session -t remote_session)
  • 該当する場合は、一時コンテナを停止/削除します

操作リファレンス

tmux(対話型)
# Create SSH session (user inputs password)
tmux new-session -d -s remote_session "ssh -o StrictHostKeyChecking=no <user>@<host> -p <port>"
# User runs: tmux attach -t remote_session

# Execute command after connection
tmux send-keys -t remote_session "<command>" Enter

# Get output
tmux capture-pane -t remote_session -p

# Kill session when done
tmux kill-session -t remote_session
sshpass
# Execute command
sshpass -p '<password>' ssh <user>@<host> "<command>"

# Upload file
sshpass -p '<password>' scp <local> <user>@<host>:<remote>

# Docker exec on remote
sshpass -p '<password>' ssh <user>@<host> "docker exec <container> <command>"
paramiko
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='<host>', username='<user>', password='<password>')

# Execute command
stdin, stdout, stderr = client.exec_command('<command>')
print(stdout.read().decode())

# SFTP
sftp = client.open_sftp()
sftp.put('local.txt', '/remote/path/remote.txt')
sftp.get('/remote/file.txt', 'local.txt')

client.close()
fabric
from fabric import Connection
conn = Connection(host='<host>', user='<user>',
                  connect_kwargs={'password': '<password>'})

result = conn.run('<command>', hide=True)
print(result.stdout)

conn.put('local.txt', '/remote/path/')
conn.get('/remote/file.txt', 'local.txt')

conn.close()

エラー処理

エラー原因解決策
Connection refusedSSH が実行されていませんリモート側の SSH サービスを確認します
Permission denied認証情報が正しくありませんユーザー名/パスワード/キーを確認します
Host key verification failed初回接続です-o StrictHostKeyChecking=no を追加します
Network unreachableネットワークの問題ですファイアウォールと VPN を確認します
Tool not foundインストールされていませんインストールコマンドを実行します
Container not found名前が正しくありませんdocker ps -a ですべてのコンテナを一覧表示します

セキュリティのベストプラクティス

  1. 可能な場合は、パスワードよりも SSH キーを優先します
  2. パスワードのハードコーディングは避けます — 環境変数または SSHPASS 環境変数を使用します
  3. キーの権限を制限します:chmod 600 ~/.ssh/id_rsa
  4. AI にパスワードを扱わせたくない場合は、tmux 方式を使用します
  5. 作業が終わったら、一時コンテナとセッションを クリーンアップします

詳細リファレンスファイル

各ツールの詳細な使い方については、以下を参照してください。

コメント