Öffnen einer App in einem Shell-Skript mit sudo


1

Ich versuche, eine App zu öffnen, die Port 25 in einem Shell-Skript abhört. Um Port 25 zu hören, muss ich die App mit ausführen sudo. Also habe ich folgendes versucht:

sudo open appThatNeedsPort25

Es fragt mich nach meinem Passwort und öffnet die App. Das Problem ist, dass die App NICHT als root ausgeführt wird und daher Port 25 nicht abhören kann ...

Wie öffne ich eine App über ein Shell-Skript, damit sie Port 25 abhören kann?


Handelt es sich um eine GUI-App oder nur um eine ausführbare Unix-Datei?
Mark

GUI-App, sie haben einen Konsolenmodus, aber es ist eine interaktive Konsole
at01

Antworten:


0

sudo -b Lässt die Anwendung im Hintergrund laufen.

sudo -b appThatNeedsPort25

Im Gegensatz zu "with" sudo appThatNeedsPort25 &wird "sudo" im Vordergrund ausgeführt, sodass Sie keine Probleme mit der Kennworteingabeaufforderung haben. Beachten Sie, dass sudo auch die -AOption hat, über eine GUI nach einem Kennwort zu fragen, anstatt im Terminal. Sie können dies verwenden, wenn sudoes nicht von einem Terminal aus ausgeführt wird.


0

Probieren Sie einfach sudo appthatneedsport25 aus, und verwenden Sie open nicht, wenn Sie mit Bash- oder Shell-Skripten arbeiten. Wenn es sich um ein interpretiertes Skript (Python Ruby usw.) handelt und es nicht auf ausführbar eingestellt ist, können Sie immer sudo python scriptname ausführen.


hmm, ok, ich kann es im Hintergrund ausführen, indem ich es anhänge > /dev/null 2>&1 &. Ich denke, es fragt mich nicht nach einem Passwort, weil ich mit sudo gespielt habe. Mein Anliegen ist, dass im Hintergrund &Probleme auftreten, wenn ich mit sudo nach einem Passwort
gefragt werde

Es sollte nicht, weil es diese Privilegien erhält, wenn Sie es ausführen, und der Rest davon wird zu diesem Zeitpunkt zu nichts umgeleitet. Erfordert diese Anwendung zukünftige Eingaben von Ihnen? Können Sie uns sagen, was es ist und wofür Sie es verwenden?
ConstantineK

Es ist ein Dummy-SMTP-Server für Entwicklungszwecke. Also habe ich es einfach versucht, nachdem die Zeit für das Erinnern des sudo-Passworts abgelaufen war. Ich denke, ich muss zuerst eine Dummy-App mit sudo
ausführen

Wenn Sie es ausführen möchten, ohne nach einem Kennwort zu fragen, müssen Sie vorher eine App ausführen, um es zwischenzuspeichern. Warum geben Sie das Kennwort nicht einfach ein, nachdem Sie den SMTP-Server gestartet haben?
ConstantineK

Das Problem ist, dass das Skript, mit dem meine App ausgeführt wird, gerade beendet wird. Das kannst du nicht sudo appname &. Wenn Sie es im Hintergrund ausführen, haben Sie nicht die Möglichkeit, Ihr Kennwort einzugeben.
27.

0

verwenden sudo open -a appThatNeedsPort25


Ich erhalte folgende Fehlermeldung:LSOpenURLsWithRole() failed for the application DevNullSmtp.jar with error -10810.
at01

Trysudo open -a /path/to/Application.app
styfle

0

Als (etwas unsichere) Alternative zu sudo können Sie Ihren ssh-Schlüssel zu Ihrem Root-Benutzer hinzufügen und dann 'ssh root @ localhost appThatNeedsPort25' ausführen.

Wenn Sie dies zum ersten Mal tun, werden Sie möglicherweise zur Eingabe Ihrer SSH-Passphrase aufgefordert. Danach wird die Passphrase zwischengespeichert, bis Sie einen Neustart durchführen.

Fügen Sie als weitere Optimierung Folgendes zu Ihrer ~ / .ssh / config-Datei hinzu:

Host root
    Hostname 127.0.0.1
    User root

Dann können Sie stattdessen einfach 'ssh root appThatNeedsPort25' eingeben.

Ich mache diesen 'ssh root'-Trick seit Jahren und es hat mir unzählige Minuten gespart, mein Passwort erneut einzugeben. :-)


In diesem Fall würde ich es vorziehen, mein Passwort
einzugeben

0

Du machst es so

sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts

Alternative

#   sudoapp: Runs .app with root privileges
#   --------------------------------------------------------------------
    sudoapp () {
        sudo "$1/Contents/MacOS/$(defaults read "$1/Contents/Info.plist" CFBundleExecutable)" $2
    }

$ sudoapp /Applications/TextEdit.app /etc/hosts

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.