透過 SSH 進行遠端工作
連線詳細資料存放於專案資料夾中的 ssh.md。每次遠端工作階段前請務必讀取該檔案。請勿猜測主機、使用者、連接埠、金鑰路徑或密碼。
何時啟用
- 使用者要求連線至、登入或於遠端機器上執行某些操作
- 使用者要求檢視、編輯、建置或測試遠端專案
- 使用者提及伺服器、VPS 或遠端主機,並預期使用 SSH 存取
步驟 1:找到 ssh.md
專案資料夾為 git rev-parse --show-toplevel,若該指令失敗則為當前目錄。ssh.md 永遠位於 <project folder>/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。 - 將其複製到
<project folder>/ssh.md。 - 若專案中尚未包含
ssh.md,則將其加入.gitignore。若.gitignore不存在則建立之。 - 停止並告知使用者填寫
ssh.md。
步驟 2:驗證設定
ssh.md 包含一個 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 <tool>。 - 除非使用者要求,否則請勿在
remote_project_path之外寫入。
安全規則
- 在執行破壞性命令(如
rm -rf、強制推送、刪除資料庫、磁碟操作或服務重新啟動)之前,請先徵求同意。 - 切勿列印、複製、記錄或提交密碼、金鑰內容或令牌。
- 請勿將憑證儲存在專案的
ssh.md或環境變數以外的任何檔案中。 - 請勿在遠端機器上執行使用者未要求執行的命令。
不支援的操作
- 將密碼儲存在被追蹤的檔案中或此技能中
- 代表使用者處理互動式 MFA 或一次性驗證碼
- 停用主機金鑰驗證
- 連線至未在
ssh.md中定義的主機