我被一个非常悲伤的问题阻止了......从几个小时...
问题是:
我尝试创建一个Symfony2 web应用程序,该应用程序需要通过许多服务器上的ssh协议进行连接。
我使用一个 Symfony2 命令,我从以下位置调用:
$process = new Process('ssh root@'.$ipInput.' apache2 -v');
(其中$ipInput是设置为 SF2 命令上第一个参数的 IP 地址)
如果我使用 check:apache:install 调用我的命令 crom CLI,没关系,因为我在 root 中使用它。
但是,如果我尝试通过使用此代码调用控制器来从页面启动该命令:
$kernel = $this->get('kernel');
$application = new Application($kernel);
$application->setAutoExit(false);
$input = new ArrayInput(array(
'command' => 'check:apache:install',
'ip' => '192.99.36.205',
));
$output = new BufferedOutput();
$application->run($input, $output);
$content = $output->fetch();
echo $content;
它返回我:
主机密钥验证失败。
我试过什么:
创建一个 www-data 密码以便能够与 su www-data 连接,并在/var/www/主目录上创建一个 .ssh/目录并生成 ssh-key,将 id_rsa.pub 放在远程服务器上...我可以使用任何密码或类似的东西使用 www-data 连接到root@remote_server,但是当我通过 Symfony2 应用程序使用我的 Web 浏览器启动它时,它不起作用。
我从谷歌上阅读了很多页面,但没有一个对我有帮助。
我知道让www-data通过SSH连接是非常贪婪的,但我不知道如何检查某些软件包是否安装在远程服务器上。
需要明确的是,我已经有近 15 台远程服务器投入生产,还有许多未来的服务器。对于每个服务器,我需要在启动 LMS 的自动安装之前检查 Web 环境。
如果有人有想法在不授予 ssh 访问 www-data 的情况下这样做,我会非常认真地倾听。
我不想在每个远程服务器上安装PHP脚本并使用HTTP请求或类似的东西调用它们。
谢谢你帮助我。
创建一个 www 数据密码以便能够与 su www-data 连接,以及 在/var/www/主目录上创建一个 .ssh/目录并生成 ssh-key,将 id_rsa.pub 放在远程服务器上...我能够 使用任何密码连接到具有 www-data 的root@remote_server或 类似的东西,但是当我用我的网络浏览器启动它时 Symfony2应用程序,它不起作用。
您需要使用 ssh 命令指定标识假设您的id_rsa处于/var/www/.ssh/id_rsa
ssh -i '/var/www/.ssh/id_rsa' root@remote_server