我已经在 Windows 机器上设置了一个共享目录,并授予 username@workgroup 完全控制权限。
当我尝试使用 smbclient 连接到装有 Linux 的 Windows 计算机时,出现错误NT_STATUS_DUPLICATE_NAME
。以下是记录:
$ smbclient -U username -W workgroup -L //windows-machine
Enter username's password:
Domain=[workgroup] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
tree connect failed: NT_STATUS_DUPLICATE_NAME
如果我故意输入错误的用户名、密码或工作组,我会收到不同的错误:NT_STATUS_LOGON_FAILURE
。因此,看起来我得到的其他信息是正确的。
我在 /etc/hosts 中放入了一个指向windows-machine
其 IP 地址的条目。Windows 计算机的 NetBIOS 名称有所不同。
有人知道这个错误是什么意思吗?
答案1
Windows 计算机的 NetBIOS 名称有所不同
这就是你的问题。只需对 Windows 机器进行注册表破解即可轻松修复。请参阅http://support.microsoft.com/kb/281308了解详情。
更新
上面链接的原始支持文章已消失(感谢微软)。新文章是通过 DNS CNAME 别名进行 SMB 文件服务器共享访问失败。
乔里尔还指出,一台服务器可以有多个 NetBIOS 名称。这可以通过编辑注册表项来实现:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\OptionalNames
并添加额外的名称。
答案2
您之所以收到该错误,可能是因为 Windows 计算机无法识别出您正在连接的对象。(使用错误的身份验证信息会改变错误,因为该问题直到连接过程的后期才会出现。)
尝试用 IP 号而不是 来连接它windows-machine
。如果成功,则表明名称问题已经解决,您可以通过让 PDC 了解自己windows-machine
或仅使用 IP 号来解决这个问题。
答案3
您应该使用“-m”标志来指定您将使用的最大协议版本。默认情况下,它是“NT1”,以下来自 smbclient 的手册页:
-m|--max-protocol protocol
This allows the user to select the highest SMB protocol level that
smbclient will use to connect to the server. By default this is set
to NT1, which is the highest available SMB1 protocol. To connect
using SMB2 or SMB3 protocol, use the strings SMB2 or SMB3
respectively. Note that to connect to a Windows 2012 server with
encrypted transport selecting a max-protocol of SMB3 is required.
我怀疑“NT1”版本依赖于 netbios,与 SMB2 及更高版本不同。
因此,再次尝试使用“-m SMB3”或“-m SMB2”,您也可以获得很大的性能收益。
答案4
您不能使用 /etc/hosts 中的机器名称,也不能使用 DNS 服务器的名称。
您必须使用计算机的 IP 地址或 Windows 中指定的计算机的 NetBIOS 名称。
要在 Windows XP 中查找 NetBIOS 名称:
- 右键单击“我的电脑”
- 点击“属性”
- 单击“计算机名称”选项卡
- 阅读“完整计算机名称”字段直到第一个句点
'.'