需要scp与www数据,而不需要密码

我有一个运行Ubuntu 11.04的networking服务器和一个运行Ubuntu 11.10的应用服务器的DMZ。 我已经设置好了,这样我就可以通过运行从Web服务器到应用程序服务器

ssh-keygen ssh-copy-id [email protected] 

其中192.168.1.6是应用的本地IP地址。 服务器和彼得是我的login帐户名称。 不过,我想通过使用PHP文件中的命令通过基于LAMP的网站来调用文件来响应。 我的问题是,我的Web应用程序的“用户”是www-data这不是一个真正的用户,所以我不能为它创build密钥。

我尝试了这里列出的程序。 然后我做了

 su su www-data 

在networking服务器(我猜根据伯克利讨论“服务器”)。 不幸的是,当我尝试scp到应用程序服务器/客户端时,我仍然被要求input密码

我试过了

 scp -vv /var/www/Src/*.txt 192.168.1.6:/var/www/Dest 

输出和我(成功)从peter账户中得到的结果大致相同。 但是,最后几行是不同的。

 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: 

如果有人能够告诉我,或者帮我find问题所在,我将不胜感激。

读过你给的链接:确保你使用了authorized_keys,而不是authorized_keys2。 后者已经被弃用了多年,在某些版本的OpenSSH中根本没有工作。

最简单的诊断方法是使用SSH服务器的debugging实例。 在服务器上,运行:

 # /usr/sbin/sshd -ddep 2222 

…在debugging模式下运行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 over rsync来确保只启动一个rsync命令。 这提供了与scp基本相同的服务,但是您的密钥可以使用可能更安全的强制命令进行标记。

我用inotify来实现John Gardeniersbuild议的方法。 这很容易,现在工作正常。 我刚刚编写了一个C ++应用程序,当目录中的文件被修改时,可以通过PHP代码来完成scp。 工作正常。

谢谢,
彼得