Вот пример ssh'ing с использованием упомянутого вами пакета при использовании модели в качестве «ключа»:
Игнорировать поставщика услуг, добавленного пакетом:
"extra": {
"laravel": {
"dont-discover": [
"Collective\\Remote\\RemoteServiceProvider"
]
}
},
Добавитьметод getConfig()
для вашей модели, содержащий сведения о ssh:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Connection extends Model
{
public function getConfig(): array {
return [
'host' => '',
'username' => '',
'password' => '',
'key' => '',
'keytext' => $this->key,
'keyphrase' => '',
'agent' => '',
'timeout' => 10,
];
}
}
Создайте файл с именем App\Overrides\RemoteManager
:
<?php
namespace App\Overrides;
class RemoteManager extends \Collective\Remote\RemoteManager
{
protected function getConfig($model)
{
return $model->getConfig();
}
}
Создайте нового поставщика услуг:
<?php
namespace App\Providers;
use App\Overrides\RemoteManager;
class RemoteServiceProvider extends \Collective\Remote\RemoteServiceProvider
{
public function register()
{
$this->app->singleton('remote', function ($app) {
return new RemoteManager($app);
});
}
}
Добавить \App\Providers\RemoteServiceProvider::class,
к config/app.php
в разделе «Поставщики услуг пакета»
Пример кода того, как это будет работать:
$connection = \App\Models\Connection::find(1);
SSH::into($connection)->run([
'echo "Hello world!"',
]);