Script de shell do OS X para conectar-se a um AP Wi-Fi conhecido sem usar explicitamente uma senha

Script de shell do OS X para conectar-se a um AP Wi-Fi conhecido sem usar explicitamente uma senha

Estou tentando escrever um script de shell que começa conectando-se a um SSID específico (aquele ao qual já me conectei antes, uma rede preferencial). A única maneira de fazer isso via linha de comando é:

networksetup -setairportnetwork en0 "MyAP" "PASSWORD"

Como posso conectar-me à rede "MyAP" sem armazenar a senha de forma insegura no shell script?

Responder1

um ótimo tutorial de Allan Odgaardno blog texmate que descreve como usar o utilitário keychain na linha de comando para recuperar uma senha (entre outras coisas). Sugiro a leitura completa, bem como os comentários correspondentes. Você pode criar uma função para ser usada genericamente, como

#!/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

Para que isso seja realizado de forma programática, sem a confirmação do usuário, você precisará conceder ao securitybinário (na minha instalação 10.11.2 está localizado em /usr/bin/security) acesso à senha específica. Isso pode ser feito de duas maneiras:

  1. executando o seguinte em um terminal

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

    conforme descrito por davidacland em seuResposta JAMFNation.Observação: Não consegui reproduzir isso com um item de chaveiro existente (como a resposta de davidacland sugere que é possível).

-ou-

  1. usando oAcesso às Chaves.appGUI para adicionar manualmente securityà lista de controle de acesso do item das chaves: GUI de acesso às chaves -> clique duas vezes no item das chaves -> Controle de acesso

insira a descrição da imagem aqui

Responder2

Se for a primeira rede preferencial disponível (Preferências de Rede, Avançado, "Lembrar redes às quais este computador ingressou" está marcado) e você não tiver a opção "Exigir autorização do administrador para: - Ativar ou desativar o Wi-Fi" marcada, você poderá usar

networksetup -setairportpower en0 offseguido por
networksetup -setairportpower en0 one ele se conectará à primeira rede preferencial disponível sem exigir uma senha (tentado no OS X 10.9.4).

Se você executar networksetup -helpa última linha de saída é

Qualquer comando que receba uma senha será aceito - para indicar que a senha deve ser lida no stdin.

informação relacionada