
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
Há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 security
biná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:
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-
- 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
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 off
seguido por
networksetup -setairportpower en0 on
e ele se conectará à primeira rede preferencial disponível sem exigir uma senha (tentado no OS X 10.9.4).
Se você executar networksetup -help
a última linha de saída é
Qualquer comando que receba uma senha será aceito - para indicar que a senha deve ser lida no stdin.