Развертывание с использованием ssh с ключом без указания парольной фразы для закрытого ключа (ssh-agent)

В чем заключается разница между Capistrano и Rocketeer, когда речь идет о парольной фразе для закрытого ключа?

У меня уже есть правильно настроенные и работающие стратегии развертывания Capistrano и Rocketeer. Capistrano позволяет ssh-agent предоставить парольную фразу - Rocketeer, похоже, нет. Вопрос не в том, как, а в том, зачем нужна кодовая фраза.

Справочная информация:

Я хочу использовать Rocketeer для развертывания приложения Laravel вместо Capistrano. Кажется, будто он делегирует SSH-соединение Laravel.

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

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

Итак, почему требуется что-то большее, чем имя сервера?

Я вижу, что в Laravel эти поля подготовлены в конфигурации пульта ДУ - я просто не мог узнать, какой компонент в конечном итоге отвечает за это и почему он не оставляет соединение SSH полностью самой системе.

Это Rocketeer, Laravel, Symfony, phpseclib или даже сам php под этим нужно столько информации для установления SSH-соединения?


person luchaos    schedule 18.04.2014    source источник
comment
Я обнаружил, что с Rocketeer сложно работать. Я бы лучше посоветовал вам перейти на развертывание. Это намного проще и содержит готовые рецепты для большинства фреймворков.   -  person Nikola Petkanski    schedule 12.01.2016
comment
Спасибо @NikolaPetkanski за совет! На самом деле я никогда не использовал Rocketeer из-за этой проблемы и вернулся к сценариям оболочки. У меня была доля Capistrano между ними. Сегодня я все еще занимаюсь подготовкой и развертыванием с помощью сценариев оболочки и Ansible. Тем не менее, я попробую развернуть.   -  person luchaos    schedule 08.02.2016


Ответы (2)


Это отсутствующая в Laravel реализация ssh-agent phpseclib, которая требует такого большого количества информации для установления SSH-соединения.

Вот почему Rocketeer не позволяет полагаться на ssh-agent рядом с аутентификацией имени пользователя / пароля и приватным ключом / парольной фразой, как это делает Capistrano.

Предложение было заявлено и объединено, чтобы включить недокументированная реализация для использования ssh-agent вместо явного ключа.

Rocketeer выиграет от этого, поскольку он полагается на указанную реализацию phpseclib в Laravel.

(Спасибо @hannesvdvreken, @ThomasPayer и @passioncoder за то, что указали в правильном направлении)

person luchaos    schedule 23.04.2014

Есть кое-что, что вы, возможно, захотите узнать.

Вы можете использовать app/config/remote.php по умолчанию или можете использовать Rocketeer config.php, который публикуется под app/packages/anahkiasen/rocketeer.

Я обычно использую файл Laravel. Я сделал копию этого файла в папку app/config/development, которая игнорируется git с .gitignore. Я только записываю в этот файл пароль своего закрытого ключа. Он будет объединен с массивом в app/config/remote.php.

Вот мой app/config/development/remote.php файл:

return array(
    'connections' => array(
        'staging' => array(
            'keyphrase' => 'your-secret-here',
        ),
        'production' => array(
            'keyphrase' => 'your-secret-here',
        ),
    ),
);

Надеюсь это поможет.

person hannesvdvreken    schedule 18.04.2014
comment
Благодарю за ваш ответ! Хотя у меня уже настроено и запущено развертывание с помощью Rocketeer. Вопрос не в том, как, а в том, зачем вообще нужна кодовая фраза - в чем разница между Capistrano и Rocketeer? Я обновил свой вопрос, чтобы прояснить это. Записывать парольную фразу где угодно - это именно то, чего я хочу избежать;) - person luchaos; 19.04.2014
comment
Кодовая фраза требуется только в том случае, если ваш закрытый ключ зашифрован. - person hannesvdvreken; 22.04.2014
comment
Exaclty - У меня есть кодовая фраза для шифрования моего закрытого ключа, что считается хорошей практикой с точки зрения безопасности. Я могу развернуть с capistrano через ssh, используя зашифрованный закрытый ключ. Для этого не требуется знать ключ. Вызов shell_exec('ssh myserver.com') в файле сценария php и выполнение на cmd дает мне результаты, которые гарантируют, что соединение ssh было установлено. Я не могу поверить, что phpseclib тоже нужна кодовая фраза. Имеет отношение к тому, как Laravel обрабатывает соединение, поскольку Rocketeer просто делегирует это Laravel. - person luchaos; 23.04.2014
comment
Извините, это так. Запуск ssh в командной строке отличается от phpseclib сеанса на сервере. - person hannesvdvreken; 23.04.2014
comment
Спасибо, что указали мне на phpseclib. Я копал глубже, и мой коллега действительно нашел недокументированную реализацию phpseclib для использования ssh-agent вместо явного ключа: github.com/phpseclib/phpseclib/blob/master/phpseclib/System/SSH/ Но Laravel еще не предлагает возможность использовать его рядом с именем пользователя / паролем и аутентификация по личному ключу / парольной фразе. Я изложил здесь проблему с предложением: github.com/laravel/framework/issues/4235 Ракетчику это однозначно выгодно. - person luchaos; 23.04.2014
comment
Спасибо! :) надеюсь, у нас это будет в конце - person luchaos; 23.04.2014