服务中没有足够的“\”字符

Mat*_*aun 4 smbclient

Arch Linux Wiki 条目中收集,我认为是从我的 Arch Linux 4.20.6 通过 SMB 访问 Windows 共享驱动器的最小设置:

  • sudo pacman -Sy samba
  • sudo echo "logging = systemd" >> /etc/samba/smb.conf因为smb服务需要这个配置文件,否则它会因错误而崩溃:

    Job for smb.service failed because the control process exited with error code.
    See "systemctl status smb.service" and "journalctl -xe" for details.
    
    Run Code Online (Sandbox Code Playgroud)
  • sudo systemctl start smb

假设远程 Windows 机器在172.16.17.52,我可以列出共享名称

smbclient -L 172.16.17.52 -U MyUserName%MyPassword -W OurWindowsDomain
Run Code Online (Sandbox Code Playgroud)

其中有一个“磁盘”类型的服务OurRemoteDirectory,我想访问它的共享名,即从它传输文件和向它传输文件。

希望能够OurRemoteDirectory在共享驱动器上访问,我发出

smbclient 172.16.17.52/OurRemoteDirectory -U MyUserName%MyPassword -W OurWindowsDomain
Run Code Online (Sandbox Code Playgroud)

但这产生了此错误消息:

Unable to initialize messaging context

172.16.17.52: Not enough '\' characters in service
Run Code Online (Sandbox Code Playgroud)

如何修复此错误并访问OurRemoteDirectory共享驱动器?

Mat*_*aun 5

要解决此问题,只需在 IP 地址前添加两个斜杠:

smbclient //172.16.17.52/OurRemoteDirectory -U MyUserName%MyPassword -W OurWindowsDomain
Run Code Online (Sandbox Code Playgroud)

什么扔我是错误消息,建议我要补充落后斜线和事实,即有上市的共享名称smbclient -L不需要任何斜线在IP地址的前面。

现在我有一个用于访问远程文件系统的命令行界面:

smb: >

建立连接后,man smbclient描述传输文件的命令,例如putget


作为后记,由于 v7.40 也curl支持协议,这使得在您只想从共享驱动器传输文件或向共享驱动器传输文件的情况下,samba包含smbclient多余的包:

smbclient //172.16.17.52/OurRemoteDirectory -U MyUserName%MyPassword -W OurWindowsDomain
Run Code Online (Sandbox Code Playgroud)

目前,curl不支持创建远程目录,这意味着Path/To/Dir/必须已经存在。此处简要讨论该功能。

  • `smbclient` 也能理解反斜杠,但是因为 Unix 风格的 shell 会将它们解析为转义字符,你需要将它们不方便地加倍:`smbclient \\\\172.16.17.52\\OurRemoteDirectory -U MyUserName...` (4认同)