我正在嘗試做一個 github-git拉以 www-data 使用者從 php 腳本中取得「主機金鑰驗證失敗」。我的主要用戶已註冊主機金鑰,但我的 www-data 沒有,因為它甚至沒有權限存取 ~/.ssh 目錄。
Ubuntu 18.04 下是否還存在系統範圍的已知主機檔案?我認為讓 www-data 用戶存取我的資料是不安全的〜/.ssh-目錄?
答案1
正如 @GMaster 所建議的,使用 HTTPS 而不是 SSH 進行自動拉取似乎是最明智的選擇。但是,如果您確實需要使用 ssh 協定(為什麼?),您有一些處理選項known_hosts
和憑證:
在 的主目錄中建立
~/.ssh
樹,包括預先填入的known_hosts
,www-data
(在我的系統中是/var/www
,但請在 中檢查您的/etc/passwd
)。您可以透過手動連線並驗證主機金鑰來自行建立該檔案。只需確保此類文件和目錄具有適當的權限(通常為 0700/0600)和所有權。將此文件放在其他地方(具有適當的權限),並使用指向它
-o UserKnownHostsFile=/path/to/known_hosts
對於上述兩種方法,請嘗試
-o StrictHostKeyChecking
各種選擇並-o UpdateHostKeys
在安全性和便利性之間取得平衡。作為最後的手段,您可以在
/var/www/.ssh/config
命令列選項中或使用命令列選項完全停用 www-data 的主機金鑰驗證-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
。請注意這意味著嚴重的安全隱患。
並且,強化您已經懷疑的內容:在任何情況下都不要讓 www-data (或任何其他)用戶訪問您的~/.ssh
.記住你的私人的鑰匙也在那裡!
答案2
是的,確實有一個系統範圍內已知的主機文件,預設是/etc/ssh/ssh_known_hosts
.您可以運行man ssh_config
並蒐索GlobalKnownHostsFile
以查看系統上的預設值。-o
如果您願意,您也可以像往常一樣變更此選項的值(使用)。