AnyBucket 如何使用你的 SSH 設定
不需要另外填寫任何金鑰儲存區。使用 SFTP 時,AnyBucket 會啟動 /usr/bin/ssh,也就是終端機使用的同一個程式,因此:
- 你在
~/.ssh中的私密金鑰可以使用, - 載入 SSH 代理程式的金鑰可以使用,
~/.ssh/config中的每個Host區塊都會套用,包括HostName、User、IdentityFile和ProxyJump,- 主機金鑰會與終端機共用的
~/.ssh/known_hosts比對。
經驗法則:只要 ssh user@host 在終端機中可以使用,在 AnyBucket 中也可以。 伺服器要求密碼時,密碼會存入你的登入鑰匙圈。
建立金鑰並加到伺服器上
如果你還沒有金鑰:
- 打開終端機,執行
ssh-keygen -t ed25519。按下 Return 保留預設檔案~/.ssh/id_ed25519,然後設定一組密語。 - 將公開的那一半
~/.ssh/id_ed25519.pub加到伺服器上的~/.ssh/authorized_keys,或傳送給伺服器管理員。絕對不要分享沒有.pub的那個檔案。 - 測試:
ssh user@host應該能在不要求伺服器密碼的情況下登入。
若不想每次都輸入密語,請用 ssh-add 將金鑰加入代理程式。macOS 可以將密語保存在你的鑰匙圈中。
在 ~/.ssh/config 中為伺服器命名
Host 區塊會為伺服器取一個簡短的名稱,並提供連線所需的設定:
Host staging
HostName staging.example.com
User deploy
IdentityFile ~/.ssh/id_ed25519
現在 ssh staging 就會用那組金鑰以 deploy 身分登入。在 AnyBucket 中透過 SFTP 連線到伺服器 staging,同一個區塊就會套用,因為 AnyBucket 會像終端機一樣,將這個名稱傳給 ssh。
透過跳板主機連線到伺服器
許多伺服器只能透過堡壘主機(也就是跳板主機)連線。在終端機中,臨時使用時你會寫 ssh -J bastion app。若要永久設定,請使用 ProxyJump:
Host bastion
HostName bastion.example.com
User me
Host app
HostName 10.0.1.20
User deploy
ProxyJump bastion
在終端機中用 ssh app 測試。能登入之後,在 AnyBucket 中透過 SFTP 連線到 app:連線會自動經過堡壘主機,App 中不需要額外設定任何東西。多次跳轉也以相同方式串接,在 ProxyJump 後面加上以逗號分隔的列表即可。
主機金鑰:「尚未認識」或「已變更」
第一次連線到伺服器時,它的金鑰還不在 ~/.ssh/known_hosts 中,AnyBucket 會像終端機一樣,在信任之前先詢問你。請將指紋與伺服器管理員公佈的指紋比對。
如果 AnyBucket 顯示金鑰已變更,請停下來查明原因。伺服器重建或重新安裝後,出現新的金鑰是預期中的情況。否則請不要連線:金鑰變更可能代表你連上的並不是你以為的那台伺服器。詳情請參閱疑難排解。
無法使用時
- 先在終端機中嘗試,使用與 AnyBucket 中完全相同的主機名稱:
ssh staging。如果失敗,問題出在 SSH 設定,而不是 App。 - 加上
-v(ssh -v staging),查看ssh嘗試了哪些金鑰和設定行。 - 檢查代理程式:
ssh-add -l會列出代理程式持有的金鑰。 - 檢查權限:
ssh會拒絕其他使用者可以讀取的私密金鑰。chmod 600 ~/.ssh/id_ed25519可以修正這個問題。
還是沒解決?請參閱 SFTP 金鑰或跳板主機無法使用,或寄電子郵件給支援團隊,附上 ssh -v 顯示的內容,並移除任何私密資訊。