2 votos

¿Cómo evitar el aviso de contraseña en la terminal?

Así que a veces mi Mac pierde su conexión a Internet.

Cuando estoy frente a ella físicamente puedo usar la terminal y hacer lo siguiente para repararla:

networksetup -setnetworkserviceenabled ethernet off

escriba mi contraseña entonces:

networksetup -setnetworkserviceenabled ethernet on

y escribir mi contraseña de nuevo.

La cosa es que la máquina está alojando varios servidores y necesito que estén funcionando incluso cuando no estoy físicamente presente. Así que quería ejecutar un script diario que hiciera esto cuando no estoy presente y que se asegurara de que la conexión se reiniciara al menos una vez al día. Pero como no he encontrado la forma de incluir mi contraseña en la línea de comandos, no puedo hacerlo.

Así que mi pregunta es: ¿es posible hacer lo que he descrito?

6 votos

Sin embargo, ¿por qué el ordenador utiliza su conexión, no sería mejor solucionar ese problema? ¿Problema de XY? meta.stackexchange.com/questions/66377/what-is-the-xy-problem

0 votos

¿No se puede ejecutar esto desde launchd automáticamente

0 votos

Lo que quise decir cuando dije que el ordenador alojaba varios servidores es lo siguiente: Corre 2 servidores de minecraft y un servidor de Plex, también uso Teamviewer para acceder a mi ordenador cuando estoy fuera para ver cómo está mi gato (sí ). El caso es que si la opción DLNA está marcada en el servidor Plex, mi ordenador puede perder la conexión en algún momento y no puedo predecir por qué o cuándo podría ocurrir. Mi problema parece estar relacionado con el propio servidor DLNA ya que tuve el mismo problema con otro servidor DLNA (Firestream) pero todo lo que he encontrado ya está hecho así que tengo que estar preparado para X solucionando Y

3voto

user67377 Puntos 21

Ok, gracias Batman por sugerir editar el archivo sudoer. En lugar de crontab o launchd para programar una vez al día (que no era lo suficientemente bueno de todos modos), en su lugar escribí ese applescript para hacerlo más regularmente y hasta ahora parece estar funcionando:

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

Estoy añadiendo más detalles: Lo exporté como un .app y luego edité el .plist del mismo con las líneas:

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

Hacerlo invisible cuando se ejecuta (sin icono en el dock) y, por último, hice que se ejecutara al iniciar sesión.

1voto

Cees Timmerman Puntos 535

sudo le permite ejecutar un comando a un nivel de permiso elevado. Puedes editar el archivo de sudoers ejecutando

sudo visudo

Una forma de hacerlo es añadir primero una línea a tu archivo de sudoers que permita que los comandos listados se ejecuten sin contraseña. Añadiendo el comando específico a su archivo sudoers, puede permitir que los comandos deseados se ejecuten sin contraseña. Puede hacer esto introduciendo las siguientes 2 líneas en su archivo sudoers (el archivo que se abre cuando ejecuta "sudo visudo"):

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

con "usuario" reemplazado por su nombre de usuario.

Entonces, como tu usuario, para ejecutar algo a una hora regular, puedes usar crontab

crontab -e

y añadir las líneas:

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

que aplicará este reinicio a la 1 AM todos los días.

Otra solución: Agregar los comandos directamente al crontab de Root:

sudo -s

crontab -e

Entonces, introduzca la línea

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

y salvar y salir.

Es posible que quieras poner esto en algún tipo de script que te notifique que la red se ha reiniciado con éxito (por ejemplo, con un correo electrónico o algo así) para que estés seguro de que ha funcionado.

Alternativamente, puedes usar un launchd script.

0 votos

Deberían ser 2 respuestas - el sudo que no cumple los requisitos y el cron que podría hacerlo

0 votos

Hay dos enfoques basados en cron listados: uno utiliza sudo+ un usuario no privado en un crontab, mientras que el otro utiliza crontab para Root. No creo que tenga sentido dividirlos en dos respuestas, ya que la mayor parte de la idea es la misma.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X