
Я пытаюсь написать скрипт оболочки, который начинается с подключения к определенному SSID (тому, к которому я уже подключался, предпочитаемая сеть). Единственный способ, которым я могу сделать это через командную строку, это:
networksetup -setairportnetwork en0 "MyAP" "PASSWORD"
Как подключиться к сети «MyAP», не сохраняя пароль в незащищенном виде в скрипте оболочки?
решение1
Естьотличный урок от Аллана Одгаардав блоге texmate, где описывается, как использовать утилиту keychain из командной строки для извлечения пароля (помимо прочего). Предлагаю прочитать его, а также соответствующие комментарии. Вы можете создать функцию для общего использования, например
#!/bin/bash
get_pw () {
security 2>&1 >/dev/null find-generic-password -ga "$1" \
| ruby -e 'print $1 if STDIN.gets =~ /^password: "(.*)"$/'
}
pass=$(get_pw $1)
echo $pass
Для того, чтобы это было сделано программно, без подтверждения пользователя, вам нужно будет предоставить бинарнику security
(в моей установке 10.11.2 он находится в /usr/bin/security
) доступ к определенному паролю. Это можно сделать одним из двух способов:
выполнив следующее из терминала
security add-generic-password -a "account name" -s "service name" -T "/usr/bin/security" -U
как описано davidacland в егоJAMFОтвет нации.Примечание: Мне не удалось воспроизвести это с помощью существующего элемента брелка для ключей (хотя ответ davidacland предполагает, что это возможно).
-или-
- используяСвязка ключей Access.appГрафический интерфейс пользователя для ручного добавления
security
в список контроля доступа элемента связки ключей: Графический интерфейс доступа к связке ключей -> дважды щелкните элемент связки ключей -> Контроль доступа
решение2
Если это первая доступная предпочитаемая сеть (Настройки сети, Дополнительно, отмечен флажок «Запомнить сети, к которым подключен этот компьютер») и у вас не отмечен флажок «Требовать авторизацию администратора для: - включения или выключения Wi-Fi», вы можете использовать
networksetup -setairportpower en0 off
затем нажмите
networksetup -setairportpower en0 on
и он подключится к первой доступной предпочитаемой сети без запроса пароля (проверено на OS X 10.9.4).
Если вы выполните networksetup -help
последнюю строку вывода:
Любая команда, принимающая пароль, будет принимать -, чтобы указать, что пароль следует считать из stdin.