Скрипт для выполнения git pull через ssh и обхода требований к парольной фразе?

Я пытаюсь настроить непрерывную интеграцию с Bamboo. Я хочу настроить задачу, которая подключается по ssh к нашему сценическому серверу, переходит в нужный каталог и выполняет git pull.

Я смог настроить задачу ssh, но выполнить git pull было сложно.

Шаги, которые я предпринял:

  • Настроил задачу ssh для перехода в каталог проекта и запуска следующего сценария:

    #!/bin/bash
    echo "pulling from master"
    git pull origin master
    
  • Скрипт запускается, но журналы показывают ошибку Permission denied (publickey). после попытки извлечения.

  • Я переключил свой удаленный URL-адрес с HTTPS на ssh и создал открытый ключ. Теперь, когда я пытаюсь выполнить ручное извлечение, он запрашивает парольную фразу ключа.

  • Используется ssh-agent для кэширования парольной фразы для сеанса.

  • Я понял, что этот кеш сохраняется только до тех пор, пока я не закрою сеанс, поэтому я выполнил шаги из этой статьи (https://confluence.atlassian.com/display/BITBUCKET/Set+up+SSH+for+Git), чтобы запускать ssh-agent при каждом новом сеансе. А именно я добавил этот скрипт в свой .bashrc:

    SSH_ENV=$HOME/.ssh/environment
    
    # start the ssh-agent
    function start_agent {
        echo "Initializing new SSH agent..."
        # spawn ssh-agent
        /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
        echo succeeded
        chmod 600 "${SSH_ENV}"
        . "${SSH_ENV}" > /dev/null
        /usr/bin/ssh-add
    }
    
    if [ -f "${SSH_ENV}" ]; then
         . "${SSH_ENV}" > /dev/null
         ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
            start_agent;
        }
    else
        start_agent;
    fi
    

и добавил это в файл .ssh/config:

Host myStashInstance.org
 IdentityFile ~/.ssh/id_rsa
  • В статье говорилось, что мне будет предложено ввести парольную фразу, и агент запустится, но этого не произошло. Мне все еще нужно вручную запустить ssh-agent.

Я хотел бы знать, какими будут следующие шаги для запуска ssh-agent при запуске нового сеанса, чтобы я мог продолжить выяснять, как завершить настройку этого задания. (Также открыт для предложений по другим направлениям, если я полностью на неправильном пути.)


person BarFooBar    schedule 10.07.2015    source источник
comment
Вам нужно поместить этот код для запуска агента в вашем ~/.bash_profile, чтобы он запускался в оболочке входа в систему.   -  person glenn jackman    schedule 10.07.2015
comment
Это все еще не работает, но определенно должно. Возможно, у меня проблема с копированием/вставкой из хрома в исходный скрипт.   -  person BarFooBar    schedule 10.07.2015


Ответы (1)


Подводя итог, вы столкнулись со следующей проблемой:

  • Bamboo Agent работает на сервере A
  • Сервер B — ваш промежуточный сервер
  • В рамках сборки, работающей на сервере A, вы хотите подключиться по SSH к B и выполнить там git pull.
  • Аутентификация в репозитории Git требует ввода пароля или кодовой фразы (даже при использовании ssh-agent).

Это можно решить несколькими способами:

Вариант 1. Запустите Bamboo Agent на промежуточном сервере

Чтобы упростить эту среду, установите агент Bamboo на промежуточный сервер. Введите URL-адрес Git и учетные данные в плане сборки Bamboo, и пусть Bamboo позаботится об этой работе.

Bamboo вытащит репозиторий Git, затем вы сможете выполнить любые шаги и выполнить развертывание на промежуточном серверном процессе.

Вариант 2. Развертывание на промежуточном сервере

Вместо выполнения операции Git на промежуточном сервере выполните ее на сервере A. Введите URL-адрес Git и учетные данные в плане сборки Bamboo, и пусть Bamboo позаботится об этой работе.

После того, как ваш проект проверен на сервере A, запустите любые шаги сборки, которые вы хотите сделать там, затем упакуйте (zip/tar/jar/...) результаты сборки и скопируйте их на промежуточный сервер. Возможно, вам вообще не нужно использовать Git на промежуточном сервере.

Вариант 3. Используйте файл .netrc для проверки подлинности Git.

Это наименее безопасный из вариантов. Верните удаленный URL-адрес на HTTPS, затем создайте файл ~/.netrc на промежуточном сервере и добавьте туда запись для своего Git-сервера, указав имя пользователя и пароль, как описано здесь: https://confluence.atlassian.com/display/STASH/Постоянная+аутентификация+с+Git+репозиториями#Постоянная+аутентификация+с+Git+репозиториями-Использование.netrcfile

Пример:

machine mygitserver
login mario
password SECRET

Осторожно, это требует, чтобы вы хранили свой пароль в виде обычного текста в файле .netrc. Используйте этот метод только в том случае, если вы можете жить с этим риском. Если пароль, используемый для этой учетной записи, изменится, вам придется изменить его и в этом файле. Вероятно, вы захотите использовать для этого технический/сервисный аккаунт, а не реальный аккаунт пользователя. Максимально заблокируйте этот аккаунт.

Один из этих трех вариантов должен помочь вам решить вашу проблему.

person nwinkler    schedule 10.07.2015