Как избежать знака @ в поле пароля URL-адреса smb://

Я пытаюсь написать сценарий bash, в котором я подключаюсь к серверу samba, получая имя пользователя и пароль, а затем говорю $username:$password@SERVERNAME.

Однако это не удастся, если в пароле есть @. Есть ли способ избежать @ из пароля в bash?

заранее спасибо

Обновление: я настраиваю этот сетевой принтер

lpadmin -p PRINTER -v smb://$username:$password@SERVER -E

и это работает, за исключением случая, когда в $password есть знак @; переменные $username и $passwords получаются при чтении стандартного ввода


person codersarepeople    schedule 01.09.2010    source источник
comment
просто двойные кавычки переменных   -  person ghostdog74    schedule 01.09.2010
comment
Я думаю, что проблема не в bash, а в том, чтобы заставить Samba распознать, какой «@» находится в пароле, а какой «@» отмечает конец пароля. И я сомневаюсь, что есть способ сделать это, но если он есть, вам нужно будет просмотреть руководства по Samba для получения информации. «Доктор, доктор, мне больно, когда я вот так бью себя»? Или, другими словами, не используйте «@» в пароле, потому что это вызывает огорчение.   -  person Jonathan Leffler    schedule 01.09.2010
comment
Может быть, попробовать заменить все @ на %40... Не думаю, что это сработает, но, может быть, так оно и есть. Используйте $password=${password//@/%40}, чтобы заменить их.   -  person dreamlax    schedule 01.09.2010
comment
Да, Dreamlax, хорошая идея, но тогда мой сервер Samba не принимает 40%.   -  person codersarepeople    schedule 01.09.2010


Ответы (2)


Ах, нет, на самом деле это не вопрос цитирования для Bash, а цитирование для Samba. У вас есть это:

lpadmin -p PRINTER -v smb://$username:$password@SERVER -E

который Bash покорно расширяет до

lpadmin -p PRINTER -v smb://alice:passw@rd@SERVER -E

а затем клиентская библиотека Samba считает, что пароль заканчивается первым знаком @, и предполагается, что он подключается к серверу с именем rd@server, не говоря уже о том, что вы не можете поместить это имя в DNS.

lpadmin исходит из CUPS, а не из Samba (вот его справочная страница) и, немного прочитав эти документы, я думаю, вы сможете использовать этот альтернативный синтаксис:

lpadmin -p PRINTER -U "${username}%${password}" -v smb://SERVER -E

Однако я удивлен, что экранирование @ так как %40 не работает. Мне кажется, это ошибка в клиентской библиотеке samba.

person zwol    schedule 01.09.2010
comment
вы правы, это самба; Я обновил вопрос, чтобы отразить то, что вы просите. - person codersarepeople; 01.09.2010
comment
Спасибо! Обновил мой ответ, возможно, на самом деле есть исправление для вас. - person zwol; 01.09.2010

Я использую администратора cups по адресу http://localhost:631/ для добавления принтеров. У меня сработало кодирование @ как %40.

person David Durham    schedule 01.04.2011