Как динамически установить ключ SSH в Laravel 5.5? - PullRequest
0 голосов
/ 22 мая 2018

Я управляю сетью из нескольких серверов и хочу подключиться к серверам с помощью ключей SSH.Я обнаружил, что мы можем указать путь к ключу SSH в файле конфигурации remote.php Laravel следующим образом:

.
.
'key' => '/path/to/ssh/key'
.
.

Но так как я хочу подключиться ко многим серверам, я не могуустановить один закрытый ключ для всех серверов, так как он не будет безопасным.Итак, единственное, о чем я могу думать, - это динамическая установка ключей SSH.До сих пор я входил в систему, используя пароль, который я могу установить динамически, используя Config::set();, но я не знаю, как настроить ключ SSH динамически.

Мы можем использовать Config::set(); и в этом случае,Но тогда мне придется хранить все ключи SSH в определенном каталоге с идентификатором сервера.Однако я хочу сохранить ключи SSH в базе данных, поскольку она более стабильна и поддерживает резервное копирование.

Я также думал об обновлении файла ключа SSH с помощью ключа SSH сервера перед подключением к серверу, но это создаст дополнительные затраты, которые я не наденуне хочу, потому что он будет замедлять соединения, потому что он будет записывать файл ключей SSH при каждом подключении к удаленному серверу через SSH.

Есть ли способ сохранить ключи SSH в базе данных, а также установить его динамически

1 Ответ

0 голосов
/ 22 мая 2018

Вот пример 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!"',
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...