Rufen Sie sudo von Jenkins an

8

Ich habe eine Build-Maschine mit einem Benutzer, abcder 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 sudoAufrufe, für die nicht "sudo: kein tty vorhanden und kein askpass-Programm angegeben" angegeben ist. Aber als ich dasselbe mit Jenkins auf einer Build-Maschine gemacht habe, die als Slave hinzugefügt wurde, wird "sudo: no tty present und no askpass program speced" angezeigt.

Ich habe eine Lösung gefunden, die besagt, dass Default requirettyin der Datei ein Kommentar abgegeben werden soll /etc/sudoers. Ich habe jedoch keinen Zugriff auf diese Datei.

Wie kann ich dieses Problem lösen?

Niraj
quelle
Ist dieser Befehl, über den Sie ausführen sudomöchten, ohne Eingabe eines Kennworts zulässig? Wenn Sie ein Passwort eingeben müssen, benötigt sudo ein tty.
Patrick
Ja .. es läuft ohne Eingabe eines Passworts
Niraj

Antworten:

3

Es gibt zwei Möglichkeiten: Kommentieren Sie die Defaults requirettyEinstellung von / etc / sudoers wie erwähnt aus oder verwenden Sie das -tArgument pseudo-tty assignation ( ) für ssh.

Versuchen Sie Folgendes in Ihrem Jenkins-Skript:

ssh -t 127.0.0.1 "sudo command"

Obwohl Sie sshvorinstallierte Schlüssel für sich selbst konfigurieren und einmal manuell ausführen müssen, um bekannten Hosts einen Eintrag hinzuzufügen, können Sie alternativ das -o StrictHostKeyChecking=noArgument hinzufügen ssh, um dies zu ignorieren.

geedoubleya
quelle
2

Es schlägt fehl, weil sudoversucht wird, das Root-Passwort einzugeben, und keine Pseudo-Tty zugewiesen ist.

Sie müssen sich entweder als root anmelden oder die folgenden Regeln in Ihrem /etc/sudoers (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 adminGruppe (oder wheel) gehört.

Idealerweise (sicherer) wäre es, Root-Berechtigungen nur auf bestimmte Befehle zu beschränken, die als angegeben werden können %admin ALL=(ALL) NOPASSWD:/path/to/program

Kenorb
quelle
2
Es erfordert immer noch ein TTY.
Leichtigkeitsrennen im Orbit
0

Wenn Sie Befehle über ssh ausführen, müssen Sie die Option "Exec in pty" aktivieren. Geben Sie hier die Bildbeschreibung ein

Sanny Patel
quelle