在symfony2脚本中将scp设为apache

时间:2015-02-03 15:30:28

标签: apache symfony scp

我对本地和目标主机之间的scp和apache用户有疑问。

在我的电脑中,我在/ var / www /中创建了一个文件夹.ssh,我为www-data用户生成了一个rsa密钥。

接下来,我已将id_rsa.pub内容复制到目标服务器上的authorized_key文件。

当我制作像这样的scp这样的sudo -u www-data scp somefile.php root @ destination_ip:/ home /时,它可以工作。

但我在symfony脚本中使用它。

$process = new Process('scp somefile.jpg root@destination_ip:/home/');
$process->setTimeout(3600);
$process->run();

if (!$process->isSuccessful()) {

   throw new \RuntimeException($process->getErrorOutput());
}

但抛出异常会导致主机密钥验证失败。

我不明白为什么。

你能帮我吗?

2 个答案:

答案 0 :(得分:1)

您可以使用ssh2 php库并通过ssh2_scp_send命令复制该文件。关于此命令,请查看php manual ... http://php.net/manual/en/function.ssh2-scp-send.php

示例代码可能是......

$connection = ssh2_connect('shell.example.com', 22, array('hostkey'=>'ssh-rsa'));

if (ssh2_auth_pubkey_file($connection, 'username',
                          '/var/www/.ssh/id_rsa.pub',
                          '/var/www/.ssh/id_rsa', 'secret')) {
  echo "Public Key Authentication Successful\n";
} else {
  die('Public Key Authentication Failed');
}
ssh2_scp_send($connection, '/local/somefile.jpg', '/remote/somefile.jpg', 0644);

答案 1 :(得分:0)

这是因为运行apache进程的用户不是root用户,并且无权连接到该服务器。检查用户是否正在运行您的apache(通常是www-data?,尝试ps aux | grep apache),然后从命令行运行:

sudo su www-data
scp somefile.jpg root@destination_ip:/home/

如果它要求您输入密码,则需要从www-data用户复制ssh密钥。可能ssh-copy-id root@destination_ip可以正常工作,然后重试scp命令应该可行。请注意,您可能需要为www-data用户生成ssh-key。