OS X shell 脚本无需明确使用密码即可连接到已知的 wifi AP

OS X shell 脚本无需明确使用密码即可连接到已知的 wifi AP

我正在尝试编写一个 shell 脚本,该脚本首先连接到特定的 SSID(我之前连接过的 SSID,首选网络)。我似乎可以通过命令行执行此操作的唯一方法是:

networksetup -setairportnetwork en0 "MyAP" "PASSWORD"

如何才能连接到“MyAP”网络,而无需在 shell 脚本中不安全地存储密码?

答案1

Allan Odgaard 的精彩教程在 texmate 博客上,它描述了如何从命令行使用 keychain 实用程序来检索密码(以及其他操作)。我建议通读它以及相应的评论。您可以创建一个通用函数,例如

#!/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)访问特定密码的权限。这可以通过以下两种方式之一完成:

  1. 通过从终端执行以下操作

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

    正如 davidacland 在他的JAMFNation 响应笔记:我无法使用现有的钥匙扣物品重现此情况(正如 davidacland 的回复所暗示的,这是可能的)。

-或者-

  1. 使用钥匙串访问.appGUI 手动添加security到钥匙串项目的访问控制列表:钥匙串访问 GUI -> 双击钥匙串项目 -> 访问控制

在此处输入图片描述

答案2

如果它是第一个可用的首选网络(网络偏好设置、高级,选中“记住此计算机已加入的网络”)并且您没有选中“需要管理员授权:- 打开或关闭 Wi-Fi”,则可以使用

networksetup -setairportpower en0 off然后按 by 键
networksetup -setairportpower en0 on,它将连接到第一个可用的首选网络,而无需密码(在 OS X 10.9.4 上尝试过)。

如果你执行networksetup -help最后一个输出行是

任何需要密码的命令都会接受 - 表示应该从标准输入读取密码。

相关内容