我对本地和目标主机之间的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());
}
但抛出异常会导致主机密钥验证失败。
我不明白为什么。
你能帮我吗?
答案 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。