[英]mount a drive on Mac OS X with bash script (and NOT use expect)
我想使用 bash 在 OS X 中安装 Samba 驱动器。 这条线可以解决问题:
mount -t smbfs //$SAMBAUSER@$ADRESS/$NAMEOFSHARE $MACOSXPATH
只有一个问题。 我希望它在没有用户输入的情况下完成 - 这意味着不能手动输入密码。而且我不会要求我的用户下载 fink 以便他们可以安装期望(如这里所示)。
我尝试通过执行以下操作将公认的解决方案应用于此处显示的类似 StackOverflow 问题:
echo "mypassword" | mount -t smbfs //$SAMBAUSER@$ADRESS/$NAMEOFSHARE $MACOSXPATH --stdin
但没有运气 - 这不起作用,Mac OS X 告诉我我使用了不正确的 mount 命令:
usage: mount [-dfruvw] [-o options] [-t ufs | external_type] special node
mount [-adfruvw] [-t ufs | external_type]
mount [-dfruvw] special | node
有什么建议么? 使用期望脚本会很容易——但这会破坏用户体验,让我在脑海中拥有这个先决条件。
这个苹果支持讨论线程中的答案对我有用:
osascript -e 'mount volume "smb://user:password@server/share"'
如果mount(8)
不能只在文件系统上调用mount
系统调用,它会寻找一个程序来帮助它。 在 FreeBSD 和 Mac OS X 上,这些帮助程序遵循命名约定mount_XXX
,其中XXX
是-t
参数的值。
这意味着您要查看mount_smbfs(8)
手册页,它告诉我们有关-N
的信息:
-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.
不幸的是,man page trail 以nsmb.conf
,没有提到任何关于存储密码的内容。 至少在 FreeBSD 8.0 上,解决方案是将带有纯文本(!)密码值的password
密钥放在[SERVER:USER]
标题下。 根据链接的nsmb.conf
手册页,这将是类型C
。
因此,您似乎希望将预配置的nsmb.conf
转储到用户的~/Library/Preferences/
目录中,然后使用-N
调用mount
命令。 据我所知,您无法提供散列值,这并不是特别棒。 我将尝试在几个小时内访问 MacBook 来测试这一点。
注意:这不是使用 GNU 工具链的方法。 如果您使用的是 Linux,您可能会使用类似mount.cifs(8)
的东西。 在这种情况下,正确的解决方案是credentials=filename
选项(当然,在-o
之后使用),其中filename
是key=value
形式的凭证文件,由换行符分隔。 见http://linux.die.net/man/8/mount.cifs
我会给你2个选择。 首先,在命令行中包含密码:
mount -t smbfs //$SAMBAUSER:$PASSWORD@$ADRESS/$NAMEOFSHARE $MACOSXPATH
这不是一个很好的选择,因为此时恰好登录的任何人都可以看到命令行(包括密码)。 不是很好,但这是一种可能性。
其次,使用期望。 您链接的 Mac OS X 提示文章可追溯到 2002 年,当时 OS X v10.2 是最新的。 虽然 10.2 显然没有将 expect 作为标准组件包含在内,但 10.6 包含,而且我很确定它现在已包含在多个版本中。
#!/usr/bin/expect -f
spawn mount -t smbfs //fred@12.34.56.78/myfiles /tmp/mountpoint
expect "Password:"
send "wibble\r"
wait
您不仅可以使用散列值,而且至少在旧版本中是这样。 smbutil 的 crypt 选项不是 DOD 级别的安全性,但与大多数安全性一样,您试图让诚实的人保持诚实:弯曲的人会找到方法。 它似乎在 Mountain Lion 中被破坏,但 ~/Library/Preferences 中的 nsmb.conf 文件在操作系统级别应该是安全的。 如果 /etc/nsmb.conf 存在,它将覆盖它。 我确信纯文本文件过时是有原因的,但我们不是用 NetInfo 来 go 吗? Apple 花了多长时间才允许使用旧的备用数据库(/etc/hosts、/etc/passwd)?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.