смонтировать диск в Mac OS X с помощью сценария bash (и НЕ использовать ожидание)

Я хотел бы смонтировать диск Samba в OS X с помощью bash. Эта строка делает свое дело:

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

Какие-либо предложения? Это было бы легко с ожидаемым сценарием, но это испортило бы пользовательский опыт, если бы я имел в виду это предварительное условие.


person lollercoaster    schedule 02.07.2011    source источник


Ответы (4)


Если 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.

К сожалению, след страницы руководства заканчивается тем, что для nsmb.conf не используется упомяните что-нибудь о хранении паролей. Во FreeBSD 8.0, по крайней мере, решением является вставить ключ password с простым текстом(! ) значение пароля под заголовком [SERVER:USER]. Это будет тип C в соответствии со связанной справочной страницей nsmb.conf.

Таким образом, кажется, что вы захотите сбросить предварительно сконфигурированный nsmb.conf в каталог вашего пользователя ~/Library/Preferences/, а затем вызвать команду mount с -N. Насколько я знаю, вы не можете предоставить хэшированное значение, что не особенно здорово. Я попытаюсь получить доступ к MacBook через несколько часов, чтобы проверить это.

Примечание: это не как это сделать с помощью цепочки инструментов GNU. Если вы работаете в Linux, вы, вероятно, будете использовать что-то вроде mount.cifs(8). Правильным решением в этом случае является параметр credentials=filename (используется после -o, разумеется), где filename – это файл учетных данных в форме key=value, разделенных символами новой строки. См. http://linux.die.net/man/8/mount.cifs

person Mark Williams    schedule 02.07.2011

Ответ в этой ветке обсуждения поддержки Apple сработал для меня:

osascript -e 'mount volume "smb://user:password@server/share"'
person Stuart Berg    schedule 06.04.2015

Я дам вам 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 //[email protected]/myfiles /tmp/mountpoint
expect "Password:"
send "wibble\r"
wait
person Gordon Davisson    schedule 02.07.2011
comment
абсолютно. Благодарность! Я просто использовал первый для простоты. Я действительно задаюсь вопросом об ожидании - я не мог найти никаких ресурсов о том, какая версия начала включаться в Mac OS X.... - person lollercoaster; 03.07.2011
comment
просто из любопытства - сценарий ожидания не работает. Я попробовал это с sudo expect script-name, и он просто повторил строку spawn mount -t smbfs //[email protected]/myfiles /tmp/mountpoint (кроме реальных значений, конечно), а затем предложил мне ввести мой пароль.... что пошло не так? - person lollercoaster; 03.07.2011
comment
Похоже, что expect "Password:" не соответствует подсказке должным образом. Попробуйте запустить его с помощью sudo expect -d ./ts, чтобы получить повествование в режиме отладки о том, что происходит во время его работы. - person Gordon Davisson; 03.07.2011

Вы не только можете использовать хэшированное значение, как ожидается, по крайней мере, в более старых версиях. Опция шифрования для smbutil не является защитой уровня Министерства обороны США, но, как и в случае с большей частью безопасности, вы пытаетесь сохранить честность честных людей: согнутые найдут способ. Похоже, что в Mountain Lion он не работает, но файл nsmb.conf в ~/Library/Preferences должен быть защищен на уровне ОС. Файл /etc/nsmb.conf переопределит его, если он существует. Я уверен, что есть причина, по которой простые текстовые файлы устарели, но разве мы не пошли на это с NetInfo? Сколько времени потребовалось Apple, чтобы разрешить использование старых резервных серверов (/etc/hosts, /etc/passwd)?

person paul    schedule 09.01.2013