我正在尝试使用 net use 在脚本中安装网络文件夹,但我一直收到密码错误错误。我正在使用以下语法:
use \\server\share password /User:serviceaccount
这样做会返回错误的密码错误。如果我把 * 作为密码,并在提示符下输入它,它就可以正常工作。
我也试过用双引号“”将密码括起来,但没有效果。这个特定的密码是随机生成的,由 14 个字符组成,包括大写字母、小写字母、数字和特殊字符(在本例中唯一的特殊字符是 $)。
该脚本正在 Windows Server 2008 R2 上运行,并且正在连接到 Server 2003。
可以通过命令行参数传递给 net use 的密码种类是否有任何限制?
编辑:这是在 PowerShell 中运行的。
结果表明,旧的 net use 文档表明您需要使用双引号,而在 PowerShell 中,您应该在密码周围使用单引号。
在“工作组环境”(没有适当的 NT 域)中从 Win2012R2 连接到 Samba 3.6.6 时,我偶然发现了这种不当行为。
以下两个版本都不能可靠地工作:
奇怪的是,它可能有 10% 的几率会起作用!而且,如果我尝试从 cmdline args 中跳过密码,并让“NET USE”提示我,那么成功的可能性大约为 95%。
我在另一台服务器(具有不同升级历史和配置的 Linux)上有另一个共享,工作得很好。
最初我怀疑是“特殊字符”,因为我的新密码“更强”。我在密码周围尝试了单引号或双引号,但无济于事。我尝试制作一个非常简单(且弱)的密码 - 但无济于事。
然后我发现建议首先使用 cmdkey 在本地保存正确的登录凭据。以前从未需要这样做,但我还是尝试了:
通过这种方式,我确实在客户端机器上保存了登录用户的凭据,但它并没有解决 NET USE 神秘的登录失败问题。
然后我开始摸索 Samba 配置和日志。
调试 Samba 身份验证时,以下 smb.conf 选项可能会派上用场:
默认值可能是
log level = 2
,它甚至不记录失败的登录尝试。Samba 在 /var/log/samba/ 中创建有用的日志文件。对于每台传入的客户端计算机,它都会创建两个文件:
使用提升的日志级别,可以清楚地看到基于 IP 的日志在 smbd 了解机器的 NetBios 名称的点结束 - 并在第二个文件中继续。
而且还可以清楚地看到,“密码验证”实际上是一个相当复杂的过程:-) CIFS 网络握手都有多次数据交换,并且部分 Samba 服务器上的凭据处理也不是很简单. 在成功和失败的尝试中,在前面提到的
log level 10
(针对 auth 和 passdb 的选择性)中,您会得到两页密集的日志列表,其中 Samba 提示它如何尝试添加域以及它如何尝试通过 映射用户username map
,最后尝试检查凭据(至少两次)。奇怪的是,对于客户端的两种不同使用方式,该过程略有不同NET USE
:在 cmdline 上使用密码(语法没有区别)与使用密码提示。精确的过程可能还取决于auth backend
您在 Samba 服务器上选择的。我的是简单的旧 passdb (/etc/samba/smbpasswd)。对我来说,罪魁祸首可能是
username map
功能。Samba 服务器上的 smb.conf 不是我自己的宝贝,我一路了解这个特性。我发现其他人警告说它会咬人。它甚至可以用于将多个 Windows 用户映射到单个本地 UNIX 用户,或者只是 1:1 - 无论哪种方式,请注意 Samba 将尝试使用“重新映射”的用户名而不是原始 Windows 用户名(您也可以在 smbpasswd 中输入)。这可能是我的问题。一旦我从 /etc/samba/smusers 中删除了“罪魁祸首的用户名”,我的NET USE
线路就开始工作了,在两种格式中的任何一种中,在 cmdline 中都有密码。不确定为什么 Samba 有时会尝试 Windows 用户名,而在其他时候它会尝试重新映射的用户名。它可能是特定历史版本的 smbd 和 passdb 的“功能”。或者针对客户端和服务器上不同 CIFS 实现的特定交互。
然后我遇到了一个后续问题(在 auth 之后),其中
security = user
结合组可访问的底层目录和 /etc/passwd(和 /etc/group)中配置错误的组意味着我的客户登录,但被拒绝访问此类CIFS 目录...请注意,在某些发行版或配置样式中,所有 UNIX 用户共享一个“用户”默认组,而在其他发行版中,他们被分配了一个单独的默认组,为每个新用户新创建...对于服务器是 Windows 2003 机器的场景,这个答案有什么用?可能用处不大,除了一般背景之外,CIFS 背后有悠久的历史/演变,并且各种 Windows CIFS 世代可能具有与开源 Samba 实现类似的“交叉兼容性怪癖”。从允许或拒绝旧版本身份验证协议的策略开始:LanMan 和 NTLM1,出于安全原因(旧协议的主要缺陷),它们通常可以在更现代的客户端或服务器上被管理禁止。我特别记得 Windows 7(或者是 Windows 8?)开始在默认配置中坚持使用 NTLMv2 的情况。