在 Linux 中安装 SharePoint Online(Office 365)

在 Linux 中安装 SharePoint Online(Office 365)

我们已开始使用 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:

https://rclone.org/downloads/

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 配置来挂载它。更多信息可在此处找到:

https://rclone.org/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 中。然后我编写了一个小型 Rub​​y 脚本来解析此文件并将该行添加到 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 创建匿名令牌

相关内容