
特定の 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 つの方法のいずれかで実行できます。
ターミナルから以下を実行する
security add-generic-password -a "account name" -s "service name" -T "/usr/bin/security" -U
davidaclandが書いたようにJAMFNationの回答。注記: 既存のキーチェーンアイテムではこれを再現できませんでした (davidacland の回答では可能であることが示唆されています)。
-または-
- 使用してキーチェーンアクセス.app
security
キーチェーン項目のアクセス制御リストに手動で追加するための GUI : キーチェーン アクセス GUI -> キーチェーン項目をダブルクリック -> アクセス制御
答え2
利用可能な最初の優先ネットワーク(ネットワーク環境設定、詳細設定、「このコンピュータが参加したネットワークを記憶する」にチェックが入っている)であり、「次の操作を行うには管理者の承認が必要 - Wi-Fiのオン/オフを切り替える」にチェックが入っていない場合は、
networksetup -setairportpower en0 off
続いて と入力する
networksetup -setairportpower en0 on
と、パスワードを要求せずに最初に利用可能な優先ネットワークに接続します (OS X 10.9.4 で試しました)。
networksetup -help
最後の出力行を実行すると、
パスワードを受け取るコマンドはすべて、パスワードを標準入力から読み取ることを示す - を受け入れます。