パスワードを明示的に使用せずに既知の Wi-Fi AP に接続する OS X シェル スクリプト

パスワードを明示的に使用せずに既知の Wi-Fi AP に接続する OS X シェル スクリプト

特定の SSID (以前接続したことのある優先ネットワーク) に接続することから始まるシェル スクリプトを記述しようとしています。コマンドラインでこれを行う唯一の方法は、次のとおりです。

networksetup -setairportnetwork en0 "MyAP" "PASSWORD"

シェル スクリプトにパスワードを安全でない状態で保存せずに、「MyAP」ネットワークに接続するにはどうすればよいですか?

答え1

があるAllan Odgaardによる素晴らしいチュートリアル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) に特定のパスワードへのアクセスを許可する必要があります。これは、次の 2 つの方法のいずれかで実行できます。

  1. ターミナルから以下を実行する

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

    davidaclandが書いたようにJAMFNationの回答注記: 既存のキーチェーンアイテムではこれを再現できませんでした (davidacland の回答では可能であることが示唆されています)。

-または-

  1. 使用してキーチェーンアクセス.appsecurityキーチェーン項目のアクセス制御リストに手動で追加するための GUI : キーチェーン アクセス GUI -> キーチェーン項目をダブルクリック -> アクセス制御

ここに画像の説明を入力してください

答え2

利用可能な最初の優先ネットワーク(ネットワーク環境設定、詳細設定、「このコンピュータが参加したネットワークを記憶する」にチェックが入っている)であり、「次の操作を行うには管理者の承認が必要 - Wi-Fiのオン/オフを切り替える」にチェックが入っていない場合は、

networksetup -setairportpower en0 off続いて と入力する
networksetup -setairportpower en0 onと、パスワードを要求せずに最初に利用可能な優先ネットワークに接続します (OS X 10.9.4 で試しました)。

networksetup -help最後の出力行を実行すると、

パスワードを受け取るコマンドはすべて、パスワードを標準入力から読み取ることを示す - を受け入れます。

関連情報