Laravel 5 Коллективный удаленный SSH Keytext - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь установить SSH-соединение с использованием ключевого текста вместо ключевого пути, но безуспешно.

Я сохраняю текст ключа в зашифрованном виде в базе данных по соображениям мобильности и безопасности, но не могуввести в конфигурации SSH, чтобы установить соединение.Все, что я получаю, это «не удается подключиться к серверу».

Я также пытался использовать жестко закодированный текст ключа, но безуспешно.

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

Это работает:

<?php

public function getSshConfig(): array
{
    $identity = $this->identityByServiceNumber(22);
    $config = array_merge([
        'host' => $this->connectionRoute(22),
        'username' => $identity->username,
        'agent' => '',
        'timeout' => 60,
    ], $identity->private_key ? [
        'key' => Storage::put('keys' . DIRECTORY_SEPARATOR . $identity->id, $identity->private_key) ?
            storage_path('app' . DIRECTORY_SEPARATOR . 'keys' . DIRECTORY_SEPARATOR . $identity->id) : null,
        'keyphrase' => $identity->password,
    ] : [
        'password' => $identity->password,
    ]);

    return $config;
}

Это неработа:

public function getSshConfig(): array
{
    $identity = $this->identityByServiceNumber(22);
    $config = array_merge([
        'host' => $this->connectionRoute(22),
        'username' => $identity->username,
        'key' => '',
        'agent' => '',
        'timeout' => 60,
    ], $identity->private_key ? [
        'keytext' => $identity->private_key,
        'keyphrase' => $identity->password,
    ] : [
        'password' => $identity->password,
    ]);

    return $config;
}

ни эта работа:

public function getSshConfig(): array
{
    $identity = $this->identityByServiceNumber(22);
    $config = array_merge([
        'host' => $this->connectionRoute(22),
        'username' => $identity->username,
        'key' => '',
        'agent' => '',
        'timeout' => 60,
    ], $identity->private_key ? [
        'keytext' => '-----BEGIN RSA PRIVATE KEY-----
        Proc-Type: 4,ENCRYPTED
        DEK-Info: AES-128-CBC,069AEAFA71947BEDA3AAA1EC609D62B0
        ······················································
        -----END RSA PRIVATE KEY-----',
        'keyphrase' => $identity->password,
    ] : [
        'password' => $identity->password,
    ]);

    return $config;
}

и эта:

'-----BEGIN RSA PRIVATE KEY-----
 Proc-Type: 4,ENCRYPTED
 DEK-Info: AES-128-CBC,069AEAFA71947BEDA3AAA1EC609D62B0
 ······················································
 -----END RSA PRIVATE KEY-----'

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

...