git clone зависает во время клонирования при использовании sshpass

Кто-нибудь обнаружил, что sshpass работает для установки фазовой фразы для клонов ssh или git?

У меня есть репозиторий github с ключом развертывания и кодовой фразой

Это приводит к тому, что запрашивается кодовая фраза, как и ожидалось, и клонируется при вводе вручную

git clone git@github:me/myrepo.git

Это приводит к зависанию

sshpass -p "secret" -v git clone git@github:me/myrepo.git

Это, похоже, происходит, потому что строка поиска никогда не будет соответствует фактической строке, но, похоже, нет возможности изменить строку поиска.

SSHPASS searching for password prompt using match "assword"
SSHPASS read: Enter passphrase for key '/home/jenkins/.ssh/id_rsa':
0
задан 23 August 2018 в 23:19
1 ответ

Это потому, что вы не можете использовать sshpass для предоставления парольной фразы, только пароль в пользовательском / пароле против секретного ключа ssh.

Предполагая, что вы используете с помощью Дженкинса - и, раз уж вы меня, то и есть. мы можем решить проблему, следуя этой стратегии:

  1. получить ключ и парольную фразу
  2. настроить оболочку ssh для автоматического использования ключевого файла
  3. настроить ssh-agent для включения предоставления парольной фразы и автоматической передачи по запросу ssh
  4. использовать ожидаем установки парольной фразы в ssh-agent

благодаря @jayhendren за то, что он подключил меня к плагину ssh-agent

Groovy-код конвейера Jenkins

/**
 * generate stand in executable for ssh to ensure we use the correct id and do not look in home's .sshdir
 * @return path to shell script wrapper for ssh
 */
def getSshWrapper(def keyPath) {
    def wrapper = "${pwd()}/ssh"
    writeFile file: wrapper, text: """#!/usr/bin/env sh
/bin/ssh -i ${keyPath} \$*"""
    sh "chmod 700 ${wrapper}"
    return wrapper
}

/**
 * Enable ssh and git to use a deploy key with a passphrase
 * @param credentialId jenkins id of private key / passphrase
 * @param closure actions to perform
 * @return result of actions
 */
def withDeployKey(def credentialId, closure) {
    def result

    // Start ssh agent and add key
    def helperFilesDir = './build/helperFiles'
    def envSettings = ["PATH=${helperFilesDir}:${env.PATH}"]
        withEnv(envSettings) {
            withCredentials([sshUserPrivateKey(credentialsId: credentialId,
                    passphraseVariable: 'PASSPHRASE',
                    keyFileVariable: 'KEY_FILE_PATH')]) {

                println "Setup Ssh Wrapper to use credentials key"
                dir(helperFilesDir) {
                    getSshWrapper(KEY_FILE_PATH)
                }

                // Run closure
                println "run closure"
                sshagent(credentials: [credentialId]) {
                    result = closure()
                }
            }
        }
    return result
}

Пример

withDeployKey('my-deploy-key') {
   sh "git clone git@github:me/myrepo.git'
} 
0
ответ дан 5 December 2019 в 05:23

Теги

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