php – 是否可以在不创建.ssh目录的情况下执行ssh命令?

我正在尝试通过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签名密钥等.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...