挂载 CIFS 凭证文件有特殊字符

挂载 CIFS 凭证文件有特殊字符

我在 XenServer (5.6 FP1) 上安装共享时遇到问题。我从命令行尝试:

mount.cifs //server/share /mnt/share -o credentials=credfile

credfile的内容为:

username=Administrator
password=What@zR\!p3s

当我运行上述 mount 命令时,出现“访问被拒绝”的错误。但是,如果我运行以下命令,它就可以正常工作:

mount.cifs //server/share /mnt/share -o username=Administrator,password=What@zR\!p3s

请注意,“\” 是转义感叹号,我在凭证文件中尝试过有和没有它的情况。有什么建议吗?

答案1

我遇到了同样的问题,因为我的密码包含逗号符号(即“PASS,WORD”):

$ sudo mount -t cifs -o domain=mydomain,username=myuser,password=PASS,WORD //server/share localfolder
mount error(22): Invalid argument
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

首先,您应该尝试启用详细模式(--verbose 选项):

$ sudo mount -t cifs -o domain=mydomain,username=myuser,password=PASS,WORD //server/share localfolder --verbose
mount.cifs kernel mount options: ip=172.30.91.137,unc=\\server\share,WORD,user=myuser,,domain=mydomain,pass=********

这是我的问题。逗号会破坏所有内容。解决方案是使用凭证文件。man mount.cifs 中写道:

credentials=filename 指定一个包含用户名和/或密码以及可选的工作组名称的文件。该文件的格式为:

          username=value
          password=value
          domain=value

这比将密码以明文形式保存在共享文件(例如 /etc/fstab)中更好。请务必妥善保护所有凭证文件。

按照您喜欢的任何方式创建此文件:

$ cat > cifs.credo
username=myuser
password=PASS,WORD
domain=mydomain

并使用(--verbose 可以省略)

$ sudo mount -t cifs -o credentials=path/to/cifs.credo //server/share localfolder --verbose
mount.cifs kernel mount options: ip=172.30.91.137,unc=\\server\share,user=myuser,,domain=mydomain,pass=********

密码没有问题。

答案2

旧版本的 mount.cifs 的一个常见问题是文件末尾的换行符被保留为密码的一部分。

因此您不需要退出,而应该尝试重写此文件而不使用尾随换行符。

要在 vim 中执行此操作,请:set noeol binary在保存之前使用。您可以使用 检查是否没有尾随换行符xxd credfile,并确认它没有以 结尾0a

如果这不起作用,我将不得不检查您的确切代码库。您使用哪个包(发行版、版本和发布)或源(存档名称)cifs-utils

答案3

另一个可以尝试的方法是输入特殊字符两次...我的密码中有 $,必须将其替换为 $$。但是,我目前遇到了 carrot: '^' 的问题

答案4

对于 mount.cifs 版本 4.5,以下内容对我有用:按域、用户名、密码顺序排列的凭据,密码后没有换行符,没有特殊字符或引号的转义。

相关内容