
我正在嘗試編寫 shell 腳本,該腳本首先連接到特定的 SSID(我之前連接過的一個,首選網路)。我似乎可以透過命令列執行此操作的唯一方法是:
networksetup -setairportnetwork en0 "MyAP" "PASSWORD"
如何在不將密碼不安全地儲存在 shell 腳本中的情況下連接到「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
)對特定密碼的存取權限。這可以透過以下兩種方式之一完成:
透過從終端機執行以下命令
security add-generic-password -a "account name" -s "service name" -T "/usr/bin/security" -U
正如達維達蘭在他的書中所描述的JAMFNation 的回應。筆記:我無法用現有的鑰匙圈項目重現這一點(正如 davidacland 的回應所暗示的那樣是可能的)。
-或者-
- 使用鑰匙圈訪問.app用於手動新增至鑰匙圈項目的存取控制清單的 GUI
security
:鑰匙圈存取 GUI -> 雙擊鑰匙圈項目 -> 存取控制
答案2
如果它是第一個可用的首選網路(「網路偏好設定」、「進階」、「記住此電腦已加入的網路」已選取)且您沒有選取「需要管理員授權才能: - 開啟或關閉Wi -Fi”,則您可以使用
networksetup -setairportpower en0 off
然後
networksetup -setairportpower en0 on
它將連接到第一個可用的首選網絡,無需密碼(在 OS X 10.9.4 上嘗試過)。
如果執行networksetup -help
最後一個輸出行是
任何需要密碼的命令都將接受 - 指示應從標準輸入讀取密碼。