我正在维护一个由 mac 和 linux 组成的异构网络,所以我决定创建一个小型 perl 脚本来统一跨机器的安装策略。
实际上,我已经有一个可以运行的 perl 脚本,但是,密码似乎是命令行的一部分,我不喜欢:
mount_smbfs -d 755 -f 755 //username_here:[email protected]/cifs_share
尝试阅读 mount_smbfs 和 nsmb.conf 的手册页,但我仍然不清楚如何继续。
我的机器是 Snow Leopard、Leopard 和 Lion 机器。
答案1
比 SvenW 提出的解决方案更安全、更符合 Apple 做事方式的解决方案是将密码添加到钥匙串中。以下是针对 AFP 共享执行此操作的方法(我假设您需要做的就是更改 -r 选项指定的协议,但我现在无法使用 SMB 进行测试;请注意,“afp”中的空格是故意的且必要的,我只在 10.6 环境中使用过它):
sudo security add-internet-password -a "username_here" -D "Network Password" -r "afp " -l "cifs_share" -s "myserver.com" -p "cifs_share" -w "password_here" -T "/System/Library/CoreServices/NetAuthAgent.app/Contents/MacOS/NetAuthAgent"
以下是手册页的相关部分安全命令:
add-internet-password [-h] [-a account] [-s server] [-w password] [options...] [keychain]
Add an internet password item.
-a account Specify account name (required)
-c creator Specify item creator (optional four-character code)
-C type Specify item type (optional four-character code)
-d domain Specify security domain string (optional)
-D kind Specify kind (default is "application password")
-j comment Specify comment string (optional)
-l label Specify label (if omitted, service name is used as default label)
-p path Specify path string (optional)
-P port Specify port number (optional)
-r protocol Specify protocol (optional four-character SecProtocolType, e.g. "http", "ftp ")
-s server Specify server name (required)
-t authenticationType
Specify authentication type (as a four-character SecAuthenticationType, default is "dflt")
-w password Specify password to be added
-A Allow any application to access this item without warning (insecure, not recommended!)
-T appPath Specify an application which may access this item (multiple -T options are allowed)
-U Update item if it already exists (if omitted, the item cannot already exist)
By default, the application which creates an item is trusted to access its data without warning. You can remove this default access
by explicitly specifying an empty app pathname: -T "". If no keychain is specified, the password is added to the default keychain.
同样的方法也适用于 SMB 共享,但请注意,匹配钥匙串条目的机制非常特殊(例如,要求协议名称中存在奇数空格),因此您需要测试并准确存储密码。当我第一次使用这种方法时,我发现为了正确获取参数,首先通过 GUI 在钥匙串中创建密码(即在 Finder 中安装共享并勾选框以将身份验证凭据保存到钥匙串)然后通过检查钥匙串中的结果条目来反向操作会有所帮助。
正如 SvenW 所指出的,要使此方法有效,钥匙串需要解锁,但这应该会在用户登录时自动发生,根据您的描述,这应该不是问题。我还想确认 Kerberos 确实在 10.5 和 10.6 中有效,但在 10.7 中存在问题。
答案2
将包含以下内容的 ~/Library/Preferences/nsmb.conf 文件放入您要挂载的用户的主目录中:
[myserver.com]
username=username_here
password=password_here
之后你只需做
mount -t smbfs -o -d=755,-f=755 //myserver.com/cifs_share /mountpoint
答案3
答案4
关于文件的答案~/Library/Preferences/nsmb.conf
几乎是正确的。您可能需要使用该-N
标志。从mount_smbfs
手册页中:
mount_smbfs [-N] [-o options] [-d mode] [-f mode] [-h] [-s] [-v] //[domain;][user[:password]@]server[/share] path
-N Do not ask for a password. At run time, mount_smbfs reads the ~/Library/Preferences/nsmb.conf file for additional configuration parameters and a password. If no password is found, mount_smbfs prompts for it.