Ich bin ein neuer Benutzer von Jenkins. Ich versuche, als Teil des Build-Schritts in Jenkins ein Shell-Skript auszuführen. Dieses Skript enthält einen Befehl, der eine Datei auf einen Remote-Server scp
überträgt ..tar
Wenn ich dieses Skript ausführe, funktioniert es einwandfrei und gibt die gewünschte Ausgabe aus. Wenn es jedoch über Jenkins ausgeführt wird, erhalte ich eine Fehlermeldung:
Host key verification failed.
lost connection
Bis zum scp
Befehl wird das Skript erfolgreich ausgeführt, danach wird der scp
Schritt übersprungen.
Ich kann nicht einmal über Jenkins per SSH oder SCP auf den Remote-Server zugreifen.
Bitte geben Sie an, was hier getan werden kann. Welche Plugins müssen dafür installiert werden ssh
und scp
?
Antwort1
Der Hosts-Schlüssel muss zur Datei „known_hosts“ des Clients hinzugefügt werden, in Ihrem Fall des Benutzers, unter dessen Konto der Jenkins-Server ausgeführt wird. Sie müssen also Folgendes tun:
- SSH-Login für den Jenkins-Benutzer aktivieren
- Melden Sie sich als Jenkins an.
- SSH zum Remote-Server
- Beantworten Sie die Frage „Soll die Serveridentität hinzugefügt werden...“ mit „Ja“.
Dann sind Sie fertig. Anschließend kann das Skript scp mit dem öffentlichen Schlüssel des Benutzers ausführen.
Antwort2
Kurz gesagt, Sie müssen den SSH-Schlüssel des Jenkins-Benutzers zu dem Server hinzufügen, bei dem Sie sich als dieser Benutzer anmelden möchten.
Einzelheiten:
Melden Sie sich beim Jenkins-Server an und führen Sie dann Folgendes aus:
sudo passwd jenkins
Geben Sie das Kennwort, das Sie dem Jenkins-Benutzer geben möchten, zweimal ein und dann:
su jenkins
cd
ssh-keygen
Drücken Sie für alle Optionen die Eingabetaste. Kopieren Sie dann die neuen SSH-Schlüssel auf den Server, auf den Sie kopieren möchten:
scp .ssh/id_rsa.pub user@newserver:/home/user/jenkins_key
Wenn Sie dazu aufgefordert werden, drücken Sie „Ja“, um fortzufahren.
Melden Sie sich dann als dieser Benutzer beim Server an und gehen Sie folgendermaßen vor:
ssh user@server
und geben Sie das Passwort ein, dann
cd .ssh
ls -lah
wenn keine „authorized_keys“ vorhanden sind, dann:
cd .ssh
touch authorized_keys
Wenn die Datei „authorized_keys“ vorhanden ist, ignorieren Sie den obigen Schritt. Dann:
cd
cat jenkins_key >> .ssh/authorized_keys
rm -rf ./jenkins_key
Beenden/vom Server abmelden. Dann zurück auf den Jenkins-Server:
ssh user@newserver
Sie sollten sich direkt anmelden, ohne Aufforderung oder Eingabe Ihres Passworts
Führen Sie nun den SCP-Job erneut in Jenkins aus
Antwort3
Ich habe eine Lösung für das Problem gefunden. 1. Ich habe ein neues shh-Schlüsselpaar unter dem Jenkins-Benutzer erstellt. 2. Den .pub-Schlüssel zum Remote-Server hinzugefügt. Beim Ausführen von SSH vom Jenkins-Server wird der neu generierte private Schlüssel verwendet. Jetzt funktionieren sowohl SSH als auch SCP als Teil des Build-Schritts. Vielen Dank
Antwort4
SSH-Agent-Plugin
Mit diesem Plugin können Sie Builds über einen SSH-Agenten in Jenkins mit SSH-Anmeldeinformationen versorgen. https://plugins.jenkins.io/ssh-agent/
Wenn dieser Fehler erneut auftritt, führen Sie diesen Befehl einmal vom Jenkins-Job aus aus:
ssh -o StrictHostKeyChecking=no user@host hostname
Danach können Sie einfach ssh vom Jenkins-Job aus ausführen:
ssh user@host hostname