Macos 使用bash脚本在Mac OS X上安装驱动器(不要使用expect)

Macos 使用bash脚本在Mac OS X上安装驱动器(不要使用expect),macos,bash,expect,mount,samba,Macos,Bash,Expect,Mount,Samba,我想使用bash在OSX中安装一个Samba驱动器。这句话的意思是: mount -t smbfs //$SAMBAUSER@$ADRESS/$NAMEOFSHARE $MACOSXPATH 只有一个问题。我希望它没有用户输入完成-这意味着没有密码可以手动输入。我不会要求我的用户下载fink,这样他们就可以安装expect了 我尝试将公认的解决方案应用于类似的StackOverflow问题,如下所示: echo "mypassword" | mount -t smbfs //$SAMBAUSE

我想使用bash在OSX中安装一个Samba驱动器。这句话的意思是:

mount -t smbfs //$SAMBAUSER@$ADRESS/$NAMEOFSHARE $MACOSXPATH
只有一个问题。我希望它没有用户输入完成-这意味着没有密码可以手动输入。我不会要求我的用户下载fink,这样他们就可以安装expect了

我尝试将公认的解决方案应用于类似的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
有什么建议吗?使用expect脚本很容易做到这一点,但如果在我的脑海中有这样的先决条件,就会破坏用户体验

如果mount8不能只调用文件系统上的mount syscall,它会寻找一个程序来帮助它。在FreeBSD和Mac OS X上,这些助手程序遵循命名约定mount_XXX,其中XXX是-t参数的值

这意味着您要检查mount_smbfs8,它告诉我们关于-N:

不幸的是,对于nsmb.conf,手册页跟踪以一个没有结束。至少在FreeBSD 8.0上,解决方案是。根据链接的nsmb.conf手册页,这将是类型C

因此,您似乎希望将预配置的nsmb.conf转储到用户的~/Library/Preferences/目录中,然后使用-N调用mount命令。据我所知,您无法提供哈希值,这并不特别可怕。我将尝试在几个小时内访问MacBook来测试这一点

注意:这不是使用GNU工具链的方法。如果您使用的是Linux,您可能会使用类似mount.cifs8的东西。在这种情况下,正确的解决方案是在-o之后使用credentials=filename选项,其中filename是key=value形式的凭证文件,由换行符分隔。请参阅

如果mount8不能只调用文件系统上的mount syscall,它会寻找一个程序来帮助它。在FreeBSD和Mac OS X上,这些助手程序遵循命名约定mount_XXX,其中XXX是-t参数的值

这意味着您要检查mount_smbfs8,它告诉我们关于-N:

不幸的是,对于nsmb.conf,手册页跟踪以一个没有结束。至少在FreeBSD 8.0上,解决方案是。根据链接的nsmb.conf手册页,这将是类型C

因此,您似乎希望将预配置的nsmb.conf转储到用户的~/Library/Preferences/目录中,然后使用-N调用mount命令。据我所知,您无法提供哈希值,这并不特别可怕。我将尝试在几个小时内访问MacBook来测试这一点


注意:这不是使用GNU工具链的方法。如果您使用的是Linux,您可能会使用类似mount.cifs8的东西。在这种情况下,正确的解决方案是在-o之后使用credentials=filename选项,其中filename是key=value形式的凭证文件,由换行符分隔。见

我给你两个选择。首先,在命令行中包含密码:

mount -t smbfs //$SAMBAUSER:$PASSWORD@$ADRESS/$NAMEOFSHARE $MACOSXPATH
这不是一个很好的选择,因为此时登录的任何人都可以看到包含密码的命令行。不太好,但这是可能的

第二,使用expect。从2002年开始,当时OSXV10.2将是最新版本。虽然10.2显然没有将expect作为标准组件包含在内,但10.6确实包含在内,而且我很确定现在已经有好几个版本包含了expect

#!/usr/bin/expect -f
spawn mount -t smbfs //fred@12.34.56.78/myfiles /tmp/mountpoint
expect "Password:"
send "wibble\r"
wait

我给你两个选择。首先,在命令行中包含密码:

mount -t smbfs //$SAMBAUSER:$PASSWORD@$ADRESS/$NAMEOFSHARE $MACOSXPATH
这不是一个很好的选择,因为此时登录的任何人都可以看到包含密码的命令行。不太好,但这是可能的

第二,使用expect。从2002年开始,当时OSXV10.2将是最新版本。虽然10.2显然没有将expect作为标准组件包含在内,但10.6确实包含在内,而且我很确定现在已经有好几个版本包含了expect

#!/usr/bin/expect -f
spawn mount -t smbfs //fred@12.34.56.78/myfiles /tmp/mountpoint
expect "Password:"
send "wibble\r"
wait

您不仅可以使用散列值,而且至少在较旧的版本中,您还可以使用散列值。smbutil的加密选项不是国防部级别的安全性,但与大多数安全性一样,您试图让诚实的人保持诚实:弯曲的人会找到一种方法。Mountain Lion中似乎有漏洞,但是~/Library/Preferences中的nsmb.conf文件在操作系统级别应该是安全的。如果它存在,/etc/nsmb.conf将覆盖它。我相信纯文本文件过时是有原因的,但我们不是用NetInfo来做的吗?苹果花了多长时间才允许使用旧的备用/etc/hosts、/etc/passwd

您不仅可以使用散列值,而且至少在较旧的版本中也可以使用散列值。smbutil的加密选项不是国防部级别的安全性,但与大多数安全性一样,您试图让诚实的人保持诚实:弯曲的人会找到一种方法。Mountain Lion中似乎有漏洞,但是~/Library/Preferences中的nsmb.conf文件在操作系统级别应该是安全的。etc/nsmb.conf将覆盖它 如果它存在。我相信纯文本文件过时是有原因的,但我们不是用NetInfo来做的吗?苹果花了多长时间才允许使用旧的备用/etc/hosts、/etc/passwd

中的答案对我有用:

osascript -e 'mount volume "smb://user:password@server/share"'
中的答案对我有用:

osascript -e 'mount volume "smb://user:password@server/share"'

绝对地谢谢为了简单起见,我只使用了第一个。不过,我确实对expect感到好奇——我似乎找不到任何关于它开始包含在Mac OS X上的版本的资料……只是出于好奇——expect脚本不起作用。我用sudoexpect脚本名尝试了它,它只是呼应了spawnmount-tsmbfs行//fred@12.34.56.78/myfiles/tmp/mountpoint,当然除了实际值之外,然后提示我输入密码……出了什么问题?听起来expect密码:与提示不匹配。尝试使用sudoexpect-d./ts运行它,以调试模式叙述它运行时发生的事情。谢谢为了简单起见,我只使用了第一个。不过,我确实对expect感到好奇——我似乎找不到任何关于它开始包含在Mac OS X上的版本的资料……只是出于好奇——expect脚本不起作用。我用sudoexpect脚本名尝试了它,它只是呼应了spawnmount-tsmbfs行//fred@12.34.56.78/myfiles/tmp/mountpoint,当然除了实际值之外,然后提示我输入密码……出了什么问题?听起来expect密码:与提示不匹配。尝试使用sudoexpect-d./ts运行它,以调试模式叙述它运行时发生的事情。