Ich habe eine Build-Maschine mit einem Benutzer, abc
der nur eingeschränkten Sudo-Zugriff hat. Wenn ich den Quellcode auschecke und mein Build-Skript ausführe, funktioniert es einwandfrei. Das Build-Skript enthält sudo
Aufrufe, für die nicht „sudo: kein TTY vorhanden und kein Askpass-Programm angegeben“ angezeigt wird. Aber als ich dasselbe mit Jenkins auf einer als Slave hinzugefügten Build-Maschine gemacht habe, wird „sudo: kein TTY vorhanden und kein Askpass-Programm angegeben“ angezeigt.
Default requiretty
Ich habe eine Lösung gefunden, die besagt, dass die Datei auskommentiert werden soll /etc/sudoers
. Aber ich habe keinen Zugriff auf diese Datei.
Wie kann ich dieses Problem lösen?
Antwort1
Dies schlägt fehl, da sudo
versucht wird, das Root-Passwort einzugeben, aber kein Pseudo-TTY zugewiesen ist.
/etc/sudoers
Sie müssen sich entweder als Root anmelden oder die folgenden Regeln in Ihrem (oder :) einrichten sudo visudo
:
# Members of the admin group may gain root privileges.
%admin ALL=(ALL) NOPASSWD:ALL
Stellen Sie dann sicher, dass Ihr Jenkins-Benutzer zur admin
Gruppe (oder wheel
) gehört.
Idealerweise (sicherer) wäre es, die Root-Rechte nur auf bestimmte Befehle zu beschränken, die wie folgt angegeben werden können:%admin ALL=(ALL) NOPASSWD:/path/to/program
Antwort2
Es gibt zwei Möglichkeiten: Kommentieren Sie die Defaults requiretty
Einstellung aus /etc/sudoers aus, wie Sie erwähnt haben, oder verwenden Sie das -t
Argument pseudo-tty allocation () für ssh
.
Versuchen Sie Folgendes in Ihrem Jenkins-Skript:
ssh -t 127.0.0.1 "sudo command"
Sie müssen zwar ssh
für sich selbst vorab freigegebene Schlüssel konfiguriert haben und diese einmal manuell ausführen, um einen Eintrag zu bekannten Hosts hinzuzufügen. Alternativ können Sie das -o StrictHostKeyChecking=no
Argument hinzufügen, um ssh
dies zu ignorieren.