我有一個 DMZ,其中包含運行 Ubuntu 11.04 的 Web 伺服器和運行 Ubuntu 11.10 的應用程式伺服器。我已經進行了設置,以便可以透過運行來從 Web 伺服器 scp 到應用程式伺服器
ssh-keygen
ssh-copy-id [email protected]
其中 192.168.1.6 是應用程式的本機 IP 位址。 server 和 peter 是我的登入帳號名稱。但是,我想使用 PHP 檔案中的命令複製檔案以回應透過基於 LAMP 的網站的呼叫。我的問題是我的網路應用程式的「用戶」是www-data,它不是真正的用戶,所以我無法為其建立金鑰。
我嘗試了概述的程序這裡。然後我做了
su
su www-data
在網頁伺服器上(我猜是伯克利討論中的“伺服器”)。不幸的是,當我嘗試 scp 到應用程式伺服器/客戶端時,我仍然被要求輸入密碼。
我試過
scp -vv /var/www/Src/*.txt 192.168.1.6:/var/www/Dest
輸出與我(成功)從 peter 帳戶進行 scp 時的輸出大致相同。然而,最後幾行是不同的。
debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: /var/www/.ssh/id_dsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering ECDSA public key: /var/www/.ssh/id_ecdsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
[email protected]'s password:
如果有人能告訴我或幫助我找到問題所在,我將不勝感激。
答案1
閱讀您提供的連結後:確保您使用authorized_keys,而不是authorized_keys2。後者已被棄用多年,並且在某些版本的 OpenSSH 中根本不起作用。
診斷此問題最簡單的方法是使用 SSH 伺服器的偵錯實例。在伺服器上,運行:
# /usr/sbin/sshd -ddep 2222
....它在偵錯模式下執行 SSH 守護程序,偵聽連接埠 2222。
$ scp -o port=2222 ...
……看看伺服器怎麼說。
對於約翰的安全問題:如果您決定繼續使用www-data帳戶,您可以使用authorized_keys中的「強制命令」選項將其金鑰限制為僅執行某些操作(例如傳輸某些檔案)。
答案2
你說你已經嘗試過
scp -vv /var/www/Src/*.txt 192.168.1.6:/var/www/Dest
但您想要使用的密鑰卻沒有出現在任何地方。嘗試:
scp -vvv -i /path/to/private/key /var/www/Src/*.txt 192.168.1.6:/var/www/Dest
無論如何,您應該確保您的連線僅限於該特定命令。我不確定 SCP 是否提供了限制命令的方法(例如使用 SSH 強制命令)。然後,我將使用 SSH over rsync 來確保僅啟動 rsync 命令。這提供了與 scp 基本相同的服務,但是您的金鑰可以使用強制命令進行標記,這可能更安全。
答案3
我使用 inotify 來實作 John Gardeniers 建議的方法。這很容易,現在效果很好。我剛剛編寫了一個 C++ 應用程序,當目錄中的檔案被修改時,它會執行 scp,這可以透過 PHP 程式碼完成。工作正常。
謝謝,
彼得