Community程式設計與開發github.com

sabiviji/remote-work-ssh

透過 SSH 連線至遠端機器,並使用別名、金鑰或密碼驗證方式(設定於 ssh.md)處理遠端專案。當使用者要求 SSH 登入伺服器、在遠端機器上執行命令、檢視或編輯遠端專案檔案,或處理遠端專案時啟用。

remote-work-ssh 是什麼?

此技能讓 AI 代理程式(如 Claude Code、Cursor、Codex 等)能夠安全地透過 SSH 連線至遠端機器,並在遠端專案目錄中執行操作。它支援三種驗證方式:別名(alias)、金鑰(key)和密碼(password)。所有連線設定皆儲存在專案根目錄的 `ssh.md` 檔案的 YAML 區塊中,代理程式會自動讀取、驗證設定並建立連線。 使用上,代理程式會先尋找 `ssh.md`,若不存在則從技能範本複製並通知使用者填寫。連線後,所有命令都會在 `remote_project_path` 目錄內執行。對於危險操作(如 `rm -rf`、強制推送、資料庫刪除等),代理程式會先徵求使用者同意。密碼與金鑰內容絕不會被列印、複製、記錄或提交。 此技能支援多種平台,包括 Claude Code(`.claude/skills/`)、OpenCode(`.opencode/skills/`)以及通用的 `.agents/skills/` 目錄。它強制執行主機金鑰驗證,不會跳過 `StrictHostKeyChecking`,也不會處理互動式 MFA 或一次性驗證碼。

相容平台✓Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/sabiviji/remote-work-ssh/tree/HEAD/.agents/skills/remote-work-ssh

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

透過 SSH 進行遠端工作

連線詳細資料存放於專案資料夾中的 ssh.md。每次遠端工作階段前請務必讀取該檔案。請勿猜測主機、使用者、連接埠、金鑰路徑或密碼。

何時啟用

  • 使用者要求連線至、登入或於遠端機器上執行某些操作
  • 使用者要求檢視、編輯、建置或測試遠端專案
  • 使用者提及伺服器、VPS 或遠端主機,並預期使用 SSH 存取

步驟 1:找到 ssh.md

專案資料夾為 git rev-parse --show-toplevel,若該指令失敗則為當前目錄。ssh.md 永遠位於 <project folder>/ssh.md。

若檔案不存在,則從範本建立並告知使用者填寫:

  1. 找到 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。
  2. 將其複製到 <project folder>/ssh.md。
  3. 若專案中尚未包含 ssh.md,則將其加入 .gitignore。若 .gitignore 不存在則建立之。
  4. 停止並告知使用者填寫 ssh.md。

步驟 2:驗證設定

ssh.md 包含一個 YAML 區塊。請檢查以下欄位:

  • auth 必須為 alias、key 或 password。
  • remote_project_path 必須已設定。
  • 所選方法所需的欄位必須已設定:
auth必填欄位
aliasalias
keyhost、user、identity_file(port 預設為 22)
passwordhost、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 <tool>。
  • 除非使用者要求,否則請勿在 remote_project_path 之外寫入。

安全規則

  • 在執行破壞性命令(如 rm -rf、強制推送、刪除資料庫、磁碟操作或服務重新啟動)之前,請先徵求同意。
  • 切勿列印、複製、記錄或提交密碼、金鑰內容或令牌。
  • 請勿將憑證儲存在專案的 ssh.md 或環境變數以外的任何檔案中。
  • 請勿在遠端機器上執行使用者未要求執行的命令。

不支援的操作

  • 將密碼儲存在被追蹤的檔案中或此技能中
  • 代表使用者處理互動式 MFA 或一次性驗證碼
  • 停用主機金鑰驗證
  • 連線至未在 ssh.md 中定義的主機

相關技能