Я пытаюсь написать сценарий оболочки, который начинается с подключения к определенному SSID (тот, к которому я подключался ранее, предпочтительная сеть). Единственный способ, которым я могу сделать это через командную строку:

networksetup -setairportnetwork en0 "MyAP" "PASSWORD"

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

2 ответа2

1

Если это первая доступная предпочтительная сеть ("Настройки сети", "Дополнительно", отмечен флажок «Помните, сети, к которым этот компьютер подключен»), и у вас не установлен флажок «Требовать авторизацию администратора для: - включения или выключения Wi-Fi», вы можете использовать

networksetup -setairportpower en0 off последующим
networksetup -setairportpower en0 on и он подключится к первой доступной предпочтительной сети без пароля (пробовал в OS X 10.9.4).

Если вы выполните networksetup -help последняя строка вывода

Любая команда, которая принимает пароль, примет - чтобы указать пароль должен быть прочитан из стандартного ввода.

1

В блоге texmate есть отличный учебник Аллана Одгаарда, в котором описано, как использовать утилиту цепочки для ключей из командной строки для извлечения пароля (среди прочего). Я предлагаю прочитать его, а также соответствующие комментарии. Вы можете создать функцию для общего использования, такую как

#!/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) доступ к конкретному паролю. Это можно сделать одним из двух способов:

  1. выполнив следующее из терминала

    security add-generic-password -a "account name" -s "service name" -T "/usr/bin/security" -U
    

    как описано Дэвидаклендом в его ответе JAMFNation. Примечание: я не смог воспроизвести это с существующим предметом цепочки для ключей (поскольку ответ davidacland предполагает, возможен).

- или -

  1. использование GUI Keychain Access.app для ручного добавления security в список контроля доступа элемента Keychain: GUI Access Keychain -> двойной щелчок по элементу Keychain -> Контроль доступа

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .