Скрипт за извършване на git pull чрез ssh и заобикаляне на изискванията за парола?

Опитвам се да настроя непрекъсната интеграция с Bamboo. Искам да конфигурирам задача, която ssh е в нашия сценичен сървър, cd е в правилната директория и изпълнява git pull.

Успях да настроя ssh задачата, но изпълнението на git pull беше трудно.

Стъпки, които предприех:

  • Конфигурира ssh задача за cd в директорията на проекта и изпълнява следния скрипт:

    #!/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-агент с всяка нова сесия. По-точно добавих този скрипт към моя .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
Това все още не работи, но определено трябва. Възможно е да имам проблем с копиране/поставяне от chrome в оригиналния скрипт.   -  person BarFooBar    schedule 10.07.2015


Отговори (1)


За да обобщим, срещате следния проблем:

  • Bamboo Agent работи на сървър A
  • Сървър B е вашият междинен сървър
  • Като част от изграждането, което се изпълнява на сървър A, искате да направите SSH в B и да направите git pull там.
  • Удостоверяването в Git repo изисква да въведете или парола, или пропуск (дори когато използвате ssh-agent).

Има няколко начина, по които това може да бъде решено:

Опция 1: Стартирайте Bamboo Agent на етапния сървър

За да опростите тази среда, инсталирайте Bamboo Agent на вашия етапен сървър. Въведете Git URL адреса и идентификационните данни в плана за изграждане на 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/Permanently+authenticating+with+Git+repositories#PermanentlyauthenticatingwithGitrepositories-Usingthe.netrcfile

Пример:

machine mygitserver
login mario
password SECRET

Внимание, това изисква да съхранявате паролата си в обикновен текст във файла .netrc. Използвайте този метод само ако можете да живеете с този риск. Ако паролата, използвана за този акаунт, се промени, ще трябва да я промените и в този файл. Вероятно искате да използвате технически/сервизен акаунт за това, а не истински потребителски акаунт. Заключете този акаунт колкото е възможно повече.

Една от тези три опции трябва да ви помогне да решите проблема си.

person nwinkler    schedule 10.07.2015