我正在尝试通过SSH从PHP脚本在远程服务器上运行命令.这是片段:
$ssh_command = "ssh -F keys/config -o UserKNownHostsFile=keys/kNown_hosts -i keys/deployment_key -p $ssh_port $r
$git_fetch = "git --git-dir=$remote_path/.git --work-tree=$remote_path fetch 2>&1";
exec("$ssh_command '$git_fetch' 2>&1", $out);
如果我从命令行运行它,脚本工作正常,因为它作为具有常规登录shell和他们自己的.ssh目录的用户运行.当我尝试通过Web界面运行脚本时,它会失败,因为SSH无法在Apache用户的主目录中创建其.ssh目录.
是否可以在没有.ssh目录的情况下使用SSH,或者是否有另一种方法可以作为Apache用户运行SSH?我不想为Apache用户创建一个.ssh文件夹.
解决方法:
我用phpseclib, a pure PHP SSH implementation做的:
<?PHP
include('Net/SSH2.PHP');
$key = new Crypt_RSA();
//$key->setPassword('whatever');
$key->loadKey(file_get_contents('privatekey'));
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', $key)) {
exit('Login Failed');
}
echo $ssh->read('username@username:~$');
$ssh->write("ls -la\n");
echo $ssh->read('username@username:~$');
?>
当我们说PHP SSH库是PECL扩展时,我可以想象的唯一另一件事.我个人建议不要使用它,因为它的编写非常糟糕.除了它之外,它很难安装并且支持不当需要您提供公钥和私钥. PHPseclib只需要私钥.这是有道理的,因为私钥通常包含嵌入其中的公钥. PECL SSH2扩展需要单独提取,这很愚蠢.
PHPseclib还支持比PECL SSH2库更多的格式. PHPseclib支持PuTTY密钥格式,XML签名密钥等.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。