it-swarm-eu.dev

Jak mohu použít SSH v potrubí Jenkins?

Mám nějaké Jenkins práce definované pomocí Jenkins Pipeline Model Definition, který staví NPM projekty. Používám Docker kontejnery stavět tyto projekty (pomocí společného obrazu s Jen Node.js + npm + příze).

Výsledky sestav jsou obsaženy ve složce dist/, kterou jsem zazipoval pomocí příkazu Zip pipeline.

Chci zkopírovat tento soubor Zip na jiný server pomocí SSH/SCP (s ověřením privátního klíče). Můj soukromý klíč je přidán do prostředí Jenkins (správce pověření), ale když používám kontejnery Docker, nelze navázat spojení SSH.

Snažil jsem se přidat agent { label 'master' } k použití hlavního uzlu Jenkins pro přenos souborů, ale zdá se, že vytváří čistý pracovní prostor s novým načítáním Git a bez mých sestavených souborů.

Poté, co jsem vyzkoušela plugin SSH Agent, mám tento výstup:

Identity added: /srv/jenkins3/workspace/[email protected]/private_key_370451445598243031.key (rsa w/o comment)
[ssh-agent] Started.
[myjob-TFD] Running Shell script
+ scp -r dist [email protected]:/var/www/xxx
$ docker exec bfda17664965b14281eef8670b34f83e0ff60218b04cfa56ba3c0ab23d94d035 env SSH_AGENT_PID=1424 SSH_AUTH_SOCK=/tmp/ssh-k658r0O76Yqb/agent.1419 ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 1424 killed;
[ssh-agent] Stopped.
Host key verification failed.
lost connection

Jak mohu přidat vzdáleného hostitele jako autorizovaného?

6
lbar

Měl jsem podobný problém. Nepoužil jsem označení „master“ a zjistil jsem, že přenos souborů funguje přes otroky, když to dělám takto:

Krok 1 - vytvoření SSH klíčů ve vzdáleném hostitelském serveru, včetně klíče k autorizovaným klíčům

Krok 2 - Vytvořte pověření pomocí klíčů SSH v Jenkins, použijte soukromý klíč ze vzdáleného hostitele

Následující krok je přidán do potrubí:

stage ('Deploy') {
    steps{
        sshagent(credentials : ['use-the-id-from-credential-generated-by-jenkins']) {
            sh 'ssh -o StrictHostKeyChecking=no [email protected] uptime'
            sh 'ssh -v [email protected]'
            sh 'scp ./source/filename [email protected]:/remotehost/target'
        }
    }
}
6
user9948238

Použijte plugin agenta SSH:

Při použití tohoto pluginu můžete použít globální pověření.

3
haschibaschi

Stejně jako @haschibaschi doporučuje i použití pluginu ssh-agent. Mám potřebu použít své osobní UID pověření na vzdáleném počítači, protože to nemá žádné UID Jenkins účet. Kód vypadá takto (například pomocí mého osobního UID = "myuid" a vzdáleného serveru hostname = "non_jenkins_svr":

sshagent(['e4fbd939-914a-41ed-92d9-8eededfb9243']) {
    // '[email protected]' required for scp (this is from UID jenkins to UID myuid)
    sh "scp $WORKSPACE/example.txt [email protected]_jenkins_svr:${dest_dir}"
}

ID e4fbd939-914a-41ed-92d9-8eededfb9243 bylo vytvořeno správcem pověření Jenkins poté, co jsem vytvořil položku globálních pověření domény.

Po vytvoření položky pověření se ID nachází ve sloupci "ID" na stránce pověření. Při tvorbě záznamu jsem zvolil typ 'SSH Username s privátním klíčem' ('Kind' pole) a zkopíroval jsem soukromý klíč RSA, který jsem pro tento účel vytvořil pod účtem myuid na Host non_jenkins_svr bez hesla.

0

Chcete-li přidat vzdáleného hostitele do známých počítačů a doufejme, že se s vaší chybou vyrovnáte, zkuste ručně ssh z hostitele Jenkins do cílového hostitele jako uživatele Jenkins.

Dostaňte se na Host, kde je nainstalován Jenkins. Typ

Sudo su jenkins

Nyní použijte ssh nebo scp

ssh [email protected]

Měli byste být takto vyzváni:

Nelze navázat autentičnost serveru Host '(ip). Otisk klíče ECDSA je SHA256: some-weird-string. Opravdu chcete pokračovat v připojení (ano/ne)?

Zadejte yes. Server bude trvale přidán jako známý hostitel. Ani se neobtěžuj předávání hesla, jen Ctrl + C a zkuste spustit Jenkinsovu práci.

0
Patryk Wlaź