Кто-нибудь обнаружил, что 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':
Это потому, что вы не можете использовать sshpass для предоставления парольной фразы, только пароль в пользовательском / пароле против закрытого ключа ssh.
Предполагая, что вы используете Jenkins - а так как вы меня, то и есть. мы можем решить проблему, следуя этой стратегии:
спасибо @jayhendren за то, что включил меня плагин ssh-agent
Отличный код конвейера 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'
}