Come evitare la richiesta di password nel terminale?

2

Quindi a volte il mio Mac perde la connessione a Internet.

Quando mi trovo di fronte fisicamente posso usare il terminale e fare quanto segue per ripararlo:

networksetup -setnetworkserviceenabled ethernet off

digita la mia password quindi:

networksetup -setnetworkserviceenabled ethernet on

e digita nuovamente la mia password.

Il fatto è che la macchina ospita diversi server e ho bisogno che siano in esecuzione anche quando non sono fisicamente presente. Quindi volevo eseguire uno script giornaliero che avrebbe dovuto farlo quando non sono presente e assicurarmi che la connessione venga ripristinata almeno una volta al giorno. Ma dal momento che non ho trovato un modo per includere la mia password nella riga di comando, non posso farlo.

Quindi la mia domanda è: è possibile fare ciò che ho descritto?

    
posta NicolasPP 28.04.2016 - 02:25
fonte

2 risposte

3

Ok, grazie Batman per aver suggerito di modificare il file sudoer. Invece di crontab o launchd per programmarlo una volta al giorno (che comunque non era abbastanza buono), ho scritto invece che il applescript lo faceva più regolarmente e finora sembra che funzioni:

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

Sto aggiungendo ulteriori dettagli: l'ho esportato come .app poi ho modificato il file .plist con le linee:

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

Per renderlo invisibile quando viene eseguito (nessuna icona del dock) e alla fine l'ho eseguito al login.

    
risposta data 16.08.2016 - 13:38
fonte
1

sudo ti consente di eseguire un comando a un livello di autorizzazione elevato. Puoi modificare il file sudoers eseguendo

sudo visudo

Un modo per farlo è aggiungere prima una riga al file sudoers che consente di eseguire i comandi elencati senza password. Aggiungendo il comando specifico al file sudoers, è possibile consentire l'esecuzione dei comandi desiderati senza password. Puoi farlo inserendo le seguenti 2 righe nel tuo file sudoers (il file che si apre quando esegui "sudo visudo"):

user ALL=(ALL) NOPASSWD: /usr/sbin/networksetup -setnetworkserviceenabled ethernet on user ALL=(ALL) NOPASSWD: /usr/sbin/networksetup -setnetworkserviceenabled ethernet off

con "utente" sostituito dal tuo nome utente.

Quindi, come utente, per eseguire qualcosa a intervalli regolari, puoi utilizzare crontab

crontab -e

e aggiungi le linee:

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

che applicherà questo riavvio alle 1:00 ogni giorno.

Un'altra soluzione: Aggiungi i comandi direttamente a crontab di root:

sudo -s

crontab -e

Quindi inserisci la riga

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

e salva e esci.

Potresti inserire questo in una sorta di script che ti avverte che la rete è stata riavviata con successo (ad es. con un'e-mail o qualcosa del genere) in modo che tu sia sicuro che funzioni.

In alternativa, puoi usare uno script di avvio.

    
risposta data 28.04.2016 - 03:05
fonte

Leggi altre domande sui tag