我们已开始使用 Office 365 订阅中包含的 SharePoint Online。我们的 Windows 用户可以安装软件,自动将 SharePoint 中的共享文档同步到他们的 Windows 计算机。如何让我的 Linux(Ubuntu)用户也这样做?
我以为 WebDav 可以工作,但我的尝试总是失败,大多是“HTTP 错误:FORBIDDEN”。具体来说,我尝试通过 Nautilus 文件浏览添加服务器,但失败了:
Server: mycompany.sharepoint.com
Port: 443
Tppe: Secure WebDav (HTTPS)
Folder: /
User name: [email protected]
Password: ********
HTTP 错误:禁止
我尝试将用户名更改为:
mycompany\first.last
我尝试将文件夹更改为:
/Shared%20Documents
以及基于网络搜索的各种其他路径均无济于事。
这可行吗?还有更好的解决方案吗?
答案1
这适用于当前最新版本的 rclone 1.50:
OneDrive for Business 基本上是 sharepoint,它通过 rclone 设置工作,如下所述:
https://rclone.org/onedrive/(检查限制!)
因此基本上你在终端中运行:
rclone config
然后输入 n,然后输入名称并选择选项 22(这可能会更改,但此处指的是 onedrive 选项)。然后按两次回车键(不需要客户端 ID 和密钥),然后输入 n 表示无需高级配置。然后输入 y 进行自动配置(您的浏览器应该会打开,如果您已登录,它会很方便,它将重定向并在浏览器中显示成功消息。
返回终端并为 onedrive 选择 1。这应该会显示一个驱动器,选择 0。下一条消息,选择 y 确认,再选择下一个 y。
现在您已经完成配置设置,因此您可以将共享挂载为:
rclone --vfs-cache-mode writes mount onedrive: ~/OneDrive
其中 onedrive 是您创建的共享的名称,~/OneDrive 是您将其挂载到主目录中的文件夹。
如果挂载出现问题,你可以使用以下命令卸载:
fusermount -uz ~/OneDrive/
您可能已经注意到共享文件夹不存在。目前 rclone 的商业版本不支持此功能。要解决这个问题,您可以使用 WebDAV 配置来挂载它。更多信息可在此处找到:
对于供应商选择 sharepoint,因此您的配置看起来像:
[onedriveShared]
type = webdav
url = https://domain.sharepoint.com/personal/firstname_lastname_domain_com/Documents
vendor = sharepoint
user = [email protected]
pass = encryptes_pass
这里的问题是您需要为每个共享添加此项。不幸的是,微软认为没有必要支持 Linux,所以我的建议是远离他们的产品,使用开箱即用的产品。
更新:提到的要点是这样的,我还没有测试过,但为了方便和完整性在这里添加了它,它应该处理共享:
# User service for Rclone mounting
#
# Place in ~/.config/systemd/user/
# File must include the '@' (ex [email protected])
# As your normal user, run
# systemctl --user daemon-reload
# You can now start/enable each remote by using rclone@<remote>
# systemctl --user enable --now rclone@dropbox
[Unit]
Description=rclone: Remote FUSE filesystem for cloud storage config %i
Documentation=man:rclone(1)
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
ExecStartPre=-/usr/bin/mkdir -p %h/mnt/%i
ExecStart= \
/usr/bin/rclone mount \
--config=%h/.config/rclone/rclone.conf \
--vfs-cache-mode writes \
--vfs-cache-max-size 100M \
--log-level INFO \
--log-file /tmp/rclone-%i.log \
--umask 022 \
--allow-other \
%i: %h/mnt/%i
ExecStop=/bin/fusermount -u %h/mnt/%i
[Install]
WantedBy=default.target
答案2
通过 WebDAV 连接到 Office365 Sharepoint(或“OneDrive for Business”)需要现有的身份验证 cookie。您无法使用用户名和密码登录 WebDAV 客户端。在 Windows 上,您可以通过将 Sharepoint 站点添加到 Internet Explorer 的 Intranet 站点列表,然后使用 Internet Explorer 登录并勾选“保持登录状态”来实现此目的,然后它将允许您在 Windows 资源管理器中映射网络驱动器。
我发现在 Linux 上执行此操作的唯一方法是使用 Konqueror,因为它包含 Web 浏览器和支持 WebDAV 的文件浏览器。您可以在 Konqueror 浏览器中登录 Sharepoint 站点,然后 Konqueror 文件浏览器可以使用该 cookie 向 WebDAV 进行身份验证。
答案3
这确实是可能的,但我还没有一个顺利的解决方案。我正在使用 davfs2 安装 SharePoint Drives。要使它工作,您必须使用浏览器进行身份验证(只需访问您的 SharePoint 网站)。然后,您必须提取名为“rtFa”和“FedAuth”的 Cookies。它们必须粘贴在文件 /etc/davfs2/davfs2.conf 的末尾,如下所示:
add_header Cookie rtFa=<your cookie here>;FedAuth=<your other cookie here>;
还添加以下行:
use_locks 0
要挂载共享,我使用共享的 SharePoint-Webinterface-URL 的 URL,末尾不带 default.aspx。我还将它们输入到 /etc/fstab 中,这样我就可以轻松挂载它们:
https://myinstitution.sharepoint.com/sites/path/to/my/share/ /path/to/my/mountpoint davfs user,rw,noauto 0 0
为了将 cookie 放入 davfs2.conf 文件中,我使用带有 cookies.txt 扩展的 Chrome,这样我只需单击两次即可将它们保存到文件 cookies.txt 中。然后我编写了一个小型 Ruby 脚本来解析此文件并将该行添加到 davfs2.conf 文件中。我目前有一个从 /etc/davfs2/davfs2.conf 到我的主目录中的文件的符号链接,但更简洁的方法是每个用户一个配置文件(据我所知 davfs2 允许这样做)。这远非理想,但目前它可以完成工作。
#!/usr/bin/ruby
davfsFile = "/path/to/the/file/davfs2.conf" # Replace this
cookiesFile = "/path/to/the/file/cookies.txt" # Replace this
cookies = File.read(cookiesFile).split("\n").map{|c| c.split("\t")}
`rm #{cookiesFile}`
cookies.select!{|c| c[5]=="rtFa" || c[5]=="FedAuth"}
cookieline = "add_header Cookie #{cookies[0][5]}=#{cookies[0][6]};#{cookies[1][5]}=#{cookies[1][6]};"
davfsconf = File.read(davfsFile).split("\n")
davfsconf[-1]=cookieline
File.write(davfsFile, davfsconf.join("\n"))
文件传输快速且可用,目录访问几乎慢得无法使用,像 ls */bla 在包含 30 个条目的目录中执行的操作需要 40 秒...我正在调查原因,了解更多信息后会在这里发布...
答案4
我确认 konqueror 确实有效。但是据我所知,spfilezilla 使用匿名令牌连接到 onedrive for business 和 sharepoint。请参见此处:https://github.com/suoko/spfilezilla 如果这是真的,我们可以让 davfs 创建匿名令牌