Задать вопрос

Как можно обойтись без паролей для git, ssh под Gulp?

ДД. Заранее скажу, что может не тот инструмент выбрал, но пока хочется обойтись тем что уже используем.
Сделал для деплоя такую вещь на Gulp:
'use strict';
var gulp = require('gulp'),
    // ...
    fs = require('fs'),
    expandTilde = require('expand-tilde'),
    GulpSSH = require('gulp-ssh'),
    config = require('./gulp-config.json');

//...

// deploy
var gulpSSH = new GulpSSH({
    ignoreErrors: false,
    sshConfig: {
        host: 'host',
        port: 'port',
        username: 'username',
        privateKey: fs.readFileSync(expandTilde('~/.ssh/id_rsa')),
        passphrase: config.ssh.passphrase
    }
});

gulp.task('deploy', function () {
    return gulpSSH
        .shell([
            // пробелы перед командами, чтоб в историю не записывал на сервере
            ' cd /var/www/webiste',
            ' git pull https://' + config.git.username + ':' + config.git.password + '@bitbucket.org/username/project.git',
            ' composer install --prefer-dist --no-scripts --quiet',
            ' composer dump-autoload --optimize --no-dev --quiet',
            // ' php yii migrate', // todo: test!
            ' npm install',
            ' npm run prod'
        ], {filePath: 'deploy.log'})
        .pipe(gulp.dest('./gulp'))
});


./gulp-config.json
{
  "ssh": {
    "passphrase": "Пароль от ssh ключа"
  },
  "git": {
    "username": "Логин битбакета",
    "password": "Пароль битбакета"
  }
}


По сути все работает, но светит в окне и в логах пароли.

1. Проблема в пароле от ssh ключа (passphrase), все перепробовал, но без него не хочет работать как минимум под MacOS, кидает ошибку:
"Error: Encrypted private key detected, but no passphrase given"
да, файл gulp-config.json в игноре и не отправляю в репу, но все равно хранить пароль в открытом виде?

2. Логин и пароль от центральной репы.
Можно конечно для сервера сделать ключ и по нему тянуть с битбакета, но удобнее оставить все на связке логина и пароля. Тут вижу два пути:
- как-то передать запрос git'а логина и пароля юзеру, а он уже укажет сам (сейчас все указывают свои)
- как-то может настроить "ForwardAgent yes" для SSH, чтоб можно было на боевом/тестовом сервер использовать, а потом ключ как-то передать git . т.е. git pull на сервере будет использовать ключ юзера который авторизовался и запустил команду.

Если будут еще какие-то идеи, замечания по коду, то буду рад выслушать.
Заранее спасибо.
  • Вопрос задан
  • 822 просмотра
Подписаться 4 Сложный Комментировать
Решения вопроса 1
@magazovski
Лучше настроить проброс ssh агента на сервер. Пробел перед командой не дает практически не дает никакой безопасности. Любой кто имеет доступ на сервер под тем же юзером сможет заснифить все команды которые вводятся. Гит сам подхватит агент, если пулить по ssh git pull git@bitbucket.org/username/project.git
sshConfig: {
            host: 'host',
            port: 'port',
            username: 'username',
            agent: process.env.SSH_AUTH_SOCK,
            agentForward: true
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы