我想在我的php中使用exec从远程服务器运行一些命令。就像这样:如何让apache做ssh
<? php
exec('ssh [email protected]_server command');
?>
我的帐户有公钥/私钥而不是Apache的访问SSH到remote_server的。请注意,我没有root权限访问任何一台机器。 Generating SSH keys for 'apache' user的所有答案都需要root访问权限。
我想在我的php中使用exec从远程服务器运行一些命令。就像这样:如何让apache做ssh
<? php
exec('ssh [email protected]_server command');
?>
我的帐户有公钥/私钥而不是Apache的访问SSH到remote_server的。请注意,我没有root权限访问任何一台机器。 Generating SSH keys for 'apache' user的所有答案都需要root访问权限。
我的推荐:使用phpseclib, a pure PHP SSH implementation。例如。
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>
我会尝试:
$identity_file = '/home/you/.ssh/id_rsa'; // <-- replace with actual priv key
exec('ssh -i ' . $identity_file . ' [email protected]_server command');
,看看你是否可以这样进行身份验证。您必须确保身份文件可以被Apache读取。
缺点现在是Apache用户可以读取你的私钥,这意味着任何其他网站运行的Apache用户也可以。但即使您为Apache用户创建私钥,情况也是如此。为了提高安全性,请参阅使用suPHP或suExec将PHP作为特定用户运行。
这是没有root权限的坏主意。为了确保Apache的用户可以看到你的私钥,你必须让它成为世界可读的:没有root用户,你不能使用chown www-data:www-data
,所以Apache不仅能够看到它,系统中的每个用户都能够至。因为这是一个坏主意,OpenSSH默认不会允许它 - 如果你的私钥有不合理的开放文件权限,它将拒绝运行。
我强烈建议不要这样做。如果你真的需要能够使用SSH密钥运行远程命令,你需要有root用户才能根据你的链接设置更安全的东西。
一个更安全的替代方案将是写在目标机器,接受包含您定义的密码的HTTP请求,执行一个预先定义的指令,并返回输出上的PHP脚本。如果此脚本安全编写并且只能执行一个预定义的命令,那么攻击者可以执行的命令与您的命令一样 - 只要此脚本的密码与您自己的任何密码都不相同即可。它不一定是一个命令,如果你小心的话,它甚至可以采用一些参数:重要的一点是你不允许远程用户在目标机器上执行任意的命令。如果您确定您希望能够运行的命令没有潜在危害,并且您的脚本不包含允许其他命令运行的编码错误,那么这不是一个好主意。
Web服务器进程由apache用户不是root拥有。
确保Apache用户有密码较少登陆到远程服务器
SE Linux应该被禁用。 Refer
不起作用。我需要使身份文件可以被apache读取。这意味着读取其他(r + o)。显然ssh不喜欢太开放的文件模式! –