在 symfony2 脚本中将 scp 作为 apache

make an scp as apache in symfony2 script

我对本地主机和目标主机之间的 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());
}

但是抛出异常消息主机密钥验证失败。

我不明白为什么。

你能帮帮我吗?

这是因为运行 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-keys。

您可以使用 ssh2 php 库并通过 ssh2_scp_send 命令复制文件。关于这个命令,查看php手册...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);