AnyBucket 如何使用你的 SSH 設定

不需要另外填寫任何金鑰儲存區。使用 SFTP 時,AnyBucket 會啟動 /usr/bin/ssh,也就是終端機使用的同一個程式,因此:

  • 你在 ~/.ssh 中的私密金鑰可以使用,
  • 載入 SSH 代理程式的金鑰可以使用,
  • ~/.ssh/config 中的每個 Host 區塊都會套用,包括 HostName、User、IdentityFile 和 ProxyJump,
  • 主機金鑰會與終端機共用的 ~/.ssh/known_hosts 比對。

經驗法則:只要 ssh user@host 在終端機中可以使用,在 AnyBucket 中也可以。 伺服器要求密碼時,密碼會存入你的登入鑰匙圈。

建立金鑰並加到伺服器上

如果你還沒有金鑰:

  1. 打開終端機,執行 ssh-keygen -t ed25519。按下 Return 保留預設檔案 ~/.ssh/id_ed25519,然後設定一組密語。
  2. 將公開的那一半 ~/.ssh/id_ed25519.pub 加到伺服器上的 ~/.ssh/authorized_keys,或傳送給伺服器管理員。絕對不要分享沒有 .pub 的那個檔案。
  3. 測試: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 顯示金鑰已變更,請停下來查明原因。伺服器重建或重新安裝後,出現新的金鑰是預期中的情況。否則請不要連線:金鑰變更可能代表你連上的並不是你以為的那台伺服器。詳情請參閱疑難排解。

無法使用時

  1. 先在終端機中嘗試,使用與 AnyBucket 中完全相同的主機名稱:ssh staging。如果失敗,問題出在 SSH 設定,而不是 App。
  2. 加上 -v(ssh -v staging),查看 ssh 嘗試了哪些金鑰和設定行。
  3. 檢查代理程式:ssh-add -l 會列出代理程式持有的金鑰。
  4. 檢查權限:ssh 會拒絕其他使用者可以讀取的私密金鑰。chmod 600 ~/.ssh/id_ed25519 可以修正這個問題。

還是沒解決?請參閱 SFTP 金鑰或跳板主機無法使用,或寄電子郵件給支援團隊,附上 ssh -v 顯示的內容,並移除任何私密資訊。