Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I use SSH in a Jenkins pipeline?

I have some Jenkins jobs defined using a Jenkins Pipeline Model Definition, which builds NPM projects. I use Docker containers to build these projects (using a common image with just Node.js + npm + yarn).

The results of the builds are contained in the dist/ folder that I zipped using a zip pipeline command.

I want to copy this ZIP file to another server using SSH/SCP (with private key authentication). My private key is added to the Jenkins environment (credentials manager), but when I use Docker containers, an SSH connection cannot be established.

I tried to add agent { label 'master' } to use the master Jenkins node for file transfer, but it seems to create a clean workspace with new Git fetch, and without my built files.

After I tried the SSH Agent Plugin, I have this output:

Identity added: /srv/jenkins3/workspace/myjob-TFD@tmp/private_key_370451445598243031.key (rsa w/o comment)
[ssh-agent] Started.
[myjob-TFD] Running shell script
+ scp -r dist test@myremotehost:/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

How do I add a remote host as authorized?

like image 256
Loïc Avatar asked May 29 '17 08:05

Loïc


People also ask

How do I use ssh-agent in Jenkins pipeline?

your pipeline should load the ssh private key credentials in the machine and connect to the node (with the public key inside). Simple example - Point to Point ( node -> destination_node ) would be: def ip-address=<some-ip-address> sh """#!/bin/bash eval "\$(ssh-agent -s)" ssh-add ~/.

Where do I put ssh keys in Jenkins?

Add SSH Key inside Jenkins In the dropdown, select 'SSH username with private key' and then give a name for it. Copy the private key from the Jenkins server. Now you can clone any git repo in this Jenkins instance. You do not need to provide the credentials while configuring the job in Jenkins.


1 Answers

I had a similar issue. I did not use the label 'master', and I identified that the file transfer works across slaves when I do it like this:

Step 1 - create SSH keys in a remote host server, include the key to authorized_keys

Step 2 - Create credential using SSH keys in Jenkins, use the private key from the remote host

Use the SSH agent plugin:

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'
        }
    }
}
like image 199
user9948238 Avatar answered Sep 28 '22 03:09

user9948238