Ubuntu

需要帶有 www-data 的 scp 而無需密碼

  • September 16, 2012

我有一個帶有執行 Ubuntu 11.04 的 Web 伺服器和一個執行 Ubuntu 11.10 的應用程序伺服器的 DMZ。我已經進行了設置,以便我可以通過執行從 Web 伺服器 scp 到應用程序伺服器

ssh-keygen
ssh-copy-id peter@192.168.1.6

其中 192.168.1.6 是應用的本地 IP 地址。server 和 peter 是我的登錄帳戶名。但是,我想使用 PHP 文件中的命令複製文件以響應通過基於 LAMP 的網站的呼叫。我的問題是我的 Web 應用程序的“使用者”是 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
www-data@192.168.1.6's password: 

如果有人能告訴我或幫助我找到問題所在,我將不勝感激。

閱讀了您提供的連結:確保您使用的是authorized_keys,而不是authorized_keys2。後者已被棄用多年,並且在某些版本的 OpenSSH 中根本不起作用。

診斷此問題的最簡單方法是使用 SSH 伺服器的調試實例。在伺服器上,執行:

# /usr/sbin/sshd -ddep 2222

…它以調試模式執行 SSH 守護程序,偵聽埠 2222。使用以下命令重做 scp 命令:

$ scp -o port=2222 ...

…看看伺服器怎麼說。

出於 John 的安全考慮:如果您決定繼續使用 www-data 帳戶,您可以使用 authorized_keys 中的“強制命令”選項將其密鑰限制為僅用於某些操作(例如傳輸某些文件)。

你說你試過

   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 overs rsync 來確保只啟動一個 rsync 命令。這提供了與 scp 基本相同的服務,但是您的密鑰可以使用可能更安全的強制命令進行標記。

引用自:https://serverfault.com/questions/421218