Wie vermeide ich die Passwortabfrage im Terminal?

Daher verliert mein Mac manchmal die Verbindung zum Internet.

Wenn ich physisch davor bin, kann ich das Terminal verwenden und Folgendes tun, um es zu reparieren:

networksetup -setnetworkserviceenabled ethernet off

Geben Sie dann mein Passwort ein:

networksetup -setnetworkserviceenabled ethernet on

und geben Sie mein Passwort erneut ein.

Die Sache ist die, dass die Maschine mehrere Server hostet und ich brauche, dass sie laufen, auch wenn ich nicht physisch anwesend bin. Also wollte ich ein tägliches Skript ausführen, das dies tut, wenn ich nicht anwesend bin, und sicherstellen, dass die Verbindung mindestens einmal am Tag zurückgesetzt wird. Aber da ich keine Möglichkeit gefunden habe, mein Passwort in die Befehlszeile einzufügen, kann ich das nicht tun.

Meine Frage ist also: Ist es möglich, das zu tun, was ich beschrieben habe?

Warum verwendet der Computer jedoch seine Verbindung, wäre es nicht besser, dieses Problem zu beheben? XY-Problem? meta.stackexchange.com/questions/66377/what-is-the-xy-problem
Kannst du das nicht automatisch von launchd ausführen
Was ich meinte, als ich sagte, dass der Computer mehrere Server hostet, ist Folgendes: Auf ihm laufen 2 Minecraft-Server und ein Plex-Server. Ich benutze auch Teamviewer, um auf meinen Computer zuzugreifen, wenn ich weg bin, um nach meiner Katze zu sehen (ja…). Die Sache ist, wenn die DLNA-Option im Plex-Server aktiviert ist, könnte mein Computer irgendwann seine Verbindung verlieren und ich kann nicht vorhersagen, warum oder wann dies passieren könnte. Mein Problem scheint mit dem DLNA-Server selbst zusammenzuhängen, da ich das gleiche Problem mit einem anderen DLNA-Server (Firestream) hatte, aber alles, was ich gefunden habe, ist bereits erledigt, also muss ich bereit sein für X, indem ich Y löse…

Antworten (2)

Ok, danke Batman für den Vorschlag, die Sudoer-Datei zu bearbeiten. Anstelle von crontab oder launchd, um es einmal am Tag zu planen (was sowieso nicht gut genug war), habe ich stattdessen dieses Applescript geschrieben, um es regelmäßiger zu tun, und bisher scheint es zu funktionieren:

repeat
    repeat
        try
            do shell script "ping -t 15 8.8.8.8"
            exit repeat
        on error
            display notification "Reconnection attempt"
            do shell script "sudo networksetup -setnetworkserviceenabled ethernet off"
            do shell script "sudo networksetup -setnetworkserviceenabled ethernet on"
            delay 9
            display notification "Connection should be established"
        end try
    end repeat
    delay 5
end repeat

Ich füge weitere Details hinzu: Ich habe es als .app exportiert und dann die .plist davon mit den Zeilen bearbeitet:

<key>LSBackgroundOnly</key>
<string>1</string>

Um es unsichtbar zu machen, wenn es läuft (kein Dock-Symbol), und schließlich habe ich es beim Anmelden ausgeführt.

Mit sudo können Sie einen Befehl mit einer erhöhten Berechtigungsstufe ausführen. Sie können die sudoers-Datei bearbeiten, indem Sie sie ausführen

sudo visudo

Eine Möglichkeit, dies zu tun, besteht darin, Ihrer sudoers-Datei zunächst eine Zeile hinzuzufügen, die es ermöglicht, die aufgeführten Befehle ohne Passwort auszuführen. Indem Sie den spezifischen Befehl zu Ihrer sudoers-Datei hinzufügen, können Sie zulassen, dass die gewünschten Befehle ohne Passwort ausgeführt werden. Sie können dies tun, indem Sie die folgenden 2 Zeilen in Ihre sudoers-Datei eingeben (die Datei, die geöffnet wird, wenn Sie "sudo visudo" ausführen):

Benutzer ALL=(ALL) NOPASSWD: /usr/sbin/networksetup -setnetworkserviceenabled Ethernet ein Benutzer ALL=(ALL) NOPASSWD: /usr/sbin/networksetup -setnetworkserviceenabled Ethernet aus

wobei "Benutzer" durch Ihren Benutzernamen ersetzt wird.

Dann können Sie als Ihr Benutzer crontab verwenden, um regelmäßig etwas auszuführen

crontab -e

und füge die Zeilen hinzu:

0 1 * * * sudo networksetup -setnetworkserviceenabled ethernet off && sudo networksetup -setnetworkserviceenabled ethernet on

Dadurch wird dieser Neustart jeden Tag um 1 Uhr morgens angewendet.

Eine andere Lösung: Fügen Sie die Befehle direkt zur crontab von root hinzu:

sudo -s

crontab -e

Geben Sie dann die Zeile ein

0 1 * * * networksetup -setnetworkserviceenabled Ethernet aus && networksetup -setnetworkserviceenabled Ethernet ein

und speichern und beenden.

Möglicherweise möchten Sie dies in eine Art Skript einfügen, das Sie darüber informiert, dass das Netzwerk erfolgreich neu gestartet wurde (z. B. mit einer E-Mail oder so), damit Sie sicher sind, dass es funktioniert hat.

Alternativ können Sie ein launchd-Skript verwenden.

Das sollten 2 Antworten sein - das sudo, das die Anforderungen nicht erfüllt, und das cron, das möglicherweise ausreicht
Es sind zwei Cron-basierte Ansätze aufgeführt: Einer verwendet sudo+ für einen nicht privilegierten Benutzer in einer Crontab, während der andere Crontab für root verwendet. Ich halte es nicht für sinnvoll, sie in zwei Antworten aufzuteilen, da der Großteil der Idee dieselbe ist.