我在 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,以下内容对我有用:按域、用户名、密码顺序排列的凭据,密码后没有换行符,没有特殊字符或引号的转义。