Как я могу правильно запускать сценарий оболочки автоматически при входе в систему с помощью моего Mac?

Я все еще изучаю сети и терминологию, которая с ними связана; так что, если я оговорюсь, не стесняйтесь меня поправлять.

В настоящее время мой модем / маршрутизатор напрямую подключен к моему Mac через кабель Ethernet, и у меня есть VPN-маршрутизатор, подключенный к моему модему маршрутизатора, к которому я подключен на своем Mac через Wi-Fi. Когда оба соединения работают одновременно, я установил Ethernet в качестве основного, поскольку я не хочу, чтобы весь мой трафик проходил через VPN без необходимости. Однако, когда я хочу получить доступ к локальной сети VPN, я должен установить свой Wi-Fi в качестве основного, что может быть утомительно, если я просто хочу быстро получить доступ к чему-либо. Чтобы упростить эту задачу, у меня есть bash-скрипт, который добавит статические маршруты в мою таблицу маршрутизации, чтобы исправить это. Я также написал файл .plist в надежде автоматически запускать этот скрипт каждый раз, когда я перезагружаю свой компьютер. Я считаю, что код правильный как в сценарии bash, так и в файле plist, но я не думаю, что сценарий bash будет выполняться должным образом из-за необходимости привилегий sudo. Я читал, что пытаться обойти это не рекомендуется, поэтому мне было интересно, есть ли альтернатива или способ запросить у меня пароль при входе в систему и запустить скрипт и позволить процессу автоматизации позаботиться обо всем остальном. .

Мой скрипт bash выглядит так и хранится на моем рабочем столе:

#!/bin/bash

USERNAME=$1

if [ $USERNAME == 'XXX' ]
 then
    route -n add 192.168.x.x/24 192.168.x.x
    route -n add 192.168.x.x/24 192.168.x.x 
    route -n add 192.168.x.x/24 192.168.x.x
elif [ $USERNAME == 'YYY']
 then
   route -n add 192.168.x.x/24 192.168.x.x 
   route -n add 192.168.x.x/24 192.168.x.x 
   route -n add 192.168.x.x/24 192.168.x.x
fi

Мой файл .plist выглядит так и хранится в папке /Users/x/Library/LaunchAgents:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"      "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>local.routes</string>   
    <key>Program</key>
    <string>/Users/x/Desktop/Routes.sh</string>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Прямо сейчас этот процесс не работает; то ли это из-за ошибки в моем коде, то ли из-за проблемы с привилегиями, я не уверен. Когда я запускаю скрипт bash непосредственно из CLI с привилегиями sudo, он работает правильно. Любая помощь приветствуется. Спасибо.


person Austin    schedule 10.03.2017    source источник
comment
Попробуйте изменить ~/Desktop/Routes.sh на /Users/Austin/Desktop/Routes.sh (или замените Austin любым своим именем для входа).   -  person rob mayoff    schedule 10.03.2017
comment
Спасибо, все равно не работает. Я даже не могу запустить файл .sh вручную, не открыв CLI, не выполнив это с помощью sudo и не введя свой пароль. Если я попытаюсь открыть с помощью › CLI, появится сообщение Broken Pipe and Permission Denied Logout. Из-за этого я предполагаю, что та же проблема, вероятно, возникает, когда система пытается автоматизировать процесс.   -  person Austin    schedule 10.03.2017


Ответы (1)


Вы пытаетесь запустить команды, требующие привилегий root. Вы не можете сделать это с помощью агента запуска, который работает как ваш пользователь.

Вы можете сделать это с помощью сценария входа. Сценарий входа запускается от имени пользователя root после вашей аутентификации. См. "Настройка входа и выхода" чтобы узнать, как настроить сценарий входа.

person rob mayoff    schedule 10.03.2017