如何从 Ubuntu 访问我的 Windows 10 机器?

如何从 Ubuntu 访问我的 Windows 10 机器?

以下是用户故事,只是为了更好地说明这是一个 Ubuntu 问题 ;-)

我作为 Ubuntu 用户(20.04.2),

想要
通过 LAN 电缆连接到我的 Windows 10 机器(最好通过 SMB 协议)

以便
我可以复制/移动我在那里编写的下载文件和文档

因为
最终,我希望我的 Ubuntu 机器成为我的文档的规范(哈!)之家。

我知道这不是一个 Windows 问答网站,所以如果您不想的话,您可以不详细介绍我在 Windows 机器上需要执行的步骤,但是,您至少可以提供一个关于 Samba 设置的步骤列表,作为我可以按照并逐一进行谷歌搜索的关键字吗?

我需要的:

不幸的是,我似乎不能直接拉取整个目录然后就完事了。相反,我想使用图形文件管理器 (Nautilus) 将一些选定的远程目录的内容“合并”到其相应的本地目录中,并手动解决任何可能出现的冲突。

我已尝试过:

我曾尝试在 Windows 上启用 NFS(因为我已经有了一些 NFS 经验),但发现 Windows 10 仍然只支持 NFS 3,因此可传输的文件名仅限于 ASCII 字符;所以这并不好。

这就是我追求桑巴舞的原因。

答案1

我最终遵循了本教程:

http://www.bitpi.co/2015/02/16/accessing-a-windows-share-with-a-raspberry-pi/

在 Windows 上:

本文针对的是 Windows 8,因此 Windows 10 中的网络设置 UI 有点不同,但设法找到了所有内容。

  • 开启网络发现(仅适用于专用网络)
  • 打开文件和打印机共享(仅适用于私人网络)
  • 选择要共享的文件夹,以及选择要授予访问权限的 Windows 用户(可以是普通的 Windows 用户),并设置(通过复选框)通过网络访问时应授予哪些权限
  • 小型共享设置窗口将显示共享文件夹的“网络路径”,请注意,挂载时需要它

找出 Windows 机器的 LAN IP 地址也是必要的:ipconfig在 Powershell 中发出的命令会显示它。

额外任务:

我的 Windows 10 不会自动设置我的 LAN 网络私人的(但是,共享仅适用于私人网络)。

以管理员权限启动 Powershell 来修复此问题:

# This will reveal — among other things — the "Name" of the LAN
Get-NetConnectionProfile

# This sets it private
Set-NetConnectionProfile -Name "the value of 'Name' from the previous command" -NetworkCategory Private

在 Ubuntu 上:

准备挂载点:

sudo mkdir /mnt/my_windows_stuffs
sudo chown LinuxUserNameHere:LinuxUserNameHere /mnt/my_windows_stuffs

安装cifs-utils,它是 samba 的一个部分插件;smbclientwinbind包将作为其依赖项自动安装。

sudo apt install cifs-utils

安装方式cifs

sudo mount.cifs //WINDOWS.IP.ADDRESS.HERE/path/on/windows /mnt/my_windows_stuffs/ -o user=WindowsUserNameHere,uid=$(id -u),gid=$(id -g)

对一些精选论点的注释:

//WINDOWS.IP.ADDRESS.HERE/path/on/windows

请注意,从 Windows 建议的“网络路径”(其中包含 Windows 计算机的名称作为服务器标识符)中,我们仅使用文件系统路径。计算机的名称将由 Windows 计算机的 LAN IP 地址替换。它仍然需要在前面加上//

user=WindowsUserNameHere

上面链接的教程建议除了提供一个选项之外,user还为密码提供一个选项,但最终可能会以纯文本形式显示~/.bash_history,最好避免这种情况。

但是,如果省略此密码选项,则将以交互方式提示输入密码,并且可以以与 Linux 的 sudo 密码类似的方式输入。

另一种可能性是使用选项credentials指向包含用户和密码值的文件。当需要装入指令时,此选项最适合/etc/fstab。有关此内容的更多信息,请参阅以下链接的文档。

uid=$(id -u),gid=$(id -g)

如果没有这些选项,挂载文件夹的内容将无法写入,即使在 Windows 端授予了写入权限。这是因为,即使在准备过程中将挂载文件夹提供给了我们的普通用户,cifs 仍会以 root 身份将内容放入其中:其中的所有内容仍归 root 所有。

我们需要告诉 cifs 代表我们的常规用户处理内容。

uid和选项gid将实现这一点。要预先找出它们的值,可以相应地运行id -uid -g命令。这些将返回我们普通用户的用户和组 ID。

然而,这可以实现自动化,通过在命令本身中使用动态替换,如上面的代码片段所示。

请注意,如果 Windows 随内容一起发送所有权信息,则可能还需要进一步的forceuid选项forcegid(不需要值)。

(我从以下人士处了解到了后者的选择@Huygens 的回答在 Unix SE 网站上。


此时,所需的 Windows 内容应该在/mnt/my_windows_stuffs/目录中可用。

请注意,在此安装上使用 plainrsync会非常慢。不幸的是,这是预料之中的. 但正常复印的费用是合理的。

处理完这些文件后,Windows 计算机可以解除绑定:

sudo umount /mnt/my_windows_stuffs/

更多信息请见mount.cifs文档

相关内容