自己配置一个Nextcloud作为私人云服务用着放心,而且现在自己安装Nextcloud非常方便。为了方便在外面的时候查看个人备份的数据,可以将备份文件夹设置为Nextcloud的外接存储 (External Storage)。前些天整理服务器的时候不小心把以前配置的通过 SFTP 外接的存储空间的证书删除了。重新配置,又发现新版本的 Nextcloud 25.0 中管理页面里面的 SFTP 配置有问题,无法自动生成密钥对。下面是使用 occ 来配置的方法。
官方也有使用 occ 来配置 External storage 的说明。不过一般情况下还真想不到有这个方法。我也是无意中看到的。
背景¶
下面假设服务器上 Nextcloud 安装在 /srv/www/htdocs/nextcloud
目录下,运行 PHP/Apache 的 Linux 用户为 wwwrun
。
切换到 Nextcloud 安装目录,
$ cd /srv/www/htdocs/nextcloud
为了方便使用wwwrun
用户来运行指令,我们先切换为 root
用户,
$ su
导出当前的外部存储配置情况¶
指令 occ files_external:export
可导出当前配置的外部存储,json 格式的配置文件内容,
# sudo -u wwwrun php occ files_external:export [ { "mount_id": 1, "mount_point": "\/HomeGallery", "storage": "\\OC\\Files\\Storage\\Local", "authentication_type": "null::null", "configuration": { "datadir": "\/data\/HomeGallery\/" }, "options": { "encrypt": true, "previews": true, "enable_sharing": false, "filesystem_check_changes": 1, "encoding_compatibility": false, "readonly": false }, "applicable_users": [ "${nc_user}" ], "applicable_groups": [] }, { "mount_id": 2, "mount_point": "\/PC_Backup", "storage": "\\OCA\\Files_External\\Lib\\Storage\\SFTP", "authentication_type": "publickey::rsa_private", "configuration": { "host": "192.168.1.1:2222", "root": "\/data\/_backup\/PC_Backup\/", "user": "${ssh_user}", "public_key": "${public_key}", "private_key": "${private_key}", "password": "" }, "options": { "encrypt": true, "previews": true, "enable_sharing": false, "filesystem_check_changes": 1, "encoding_compatibility": false, "readonly": true }, "applicable_users": [ "${nc_user}" ], "applicable_groups": [] } ]
上面输出的结果中有两个外部存储。mount_id 为 1 的是一个没使用认证("null::null"
)的外部存储。与Nextcloud运行在同一个系统中,可直接访问指定目录 /data/HomeGallery/
中的文件。可在Nextcloud中挂载该外部存储的Nextcloud用户的用户名被我打码替换成了 ${nc_user}
。(其实没必要 :))可以看到路径中的 /
都被加了个 \
来转义了。
mount_id 为 2 的就是使用 RSA Public key 认证(publickey::rsa_private
)的 SFTP 连接的那个外部存储了。可以用这个作为模板来编写一个配置文件,假设为 ext_config.json
文件,然后将其导入Nextcloud就完成配置了。
准备要导入的配置的 json 文件¶
准备配置文件的时候,那些路径就不需要前置转义符号反斜杠 \
了。例如,
{ "mount_id": 1, "mount_point": "/NEW_EXT_STORAGE", "storage": "\\OCA\\Files_External\\Lib\\Storage\\SFTP", "authentication_type": "publickey::rsa_private", "configuration": { "host": "192.168.1.1:2222", "root": "/TARGET/DIRECTORY/", "user": "${SSH_user}", "public_key": "${public_key}", "private_key": "${private_key}", "password": "" }, "options": { "encrypt": true, "previews": true, "enable_sharing": false, "filesystem_check_changes": 1, "encoding_compatibility": false, "readonly": true }, "applicable_users": [ "${nc_user}" ], "applicable_groups": [] }
其中标蓝色的部分是需要注意修改的。
RSA Public key 认证配置部分需要多加注意,说明如下。 ${public_key}
和 ${private_key}
可以就地生成,现在 4096bit 的安全性应该是基本的吧。
假设我们现在登录到要连接到的那个服务器的那个文件夹("/TARGET/DIRECTORY/"
)的所有者帐户(或者有访问权的其他某个帐户),进入其家目录的 .ssh
文件夹,
$ cd /home/sftp_user/.ssh
创建一个 4096 位的 RSA 密钥对,
$ ssh-keygen -trsa -b4096
假设将其产生的公钥和私钥保存为 id_rsa_nc_sftp.pub
和 id_rsa_nc_sftp
了。
将公钥加入该sftp用户的可信公钥列表,
$ cat id_rsa_nc_sftp.pub >> /home/sftp_user/.ssh/authorized_keys
公钥提取,
$ cat id_rsa_nc_sftp.pub
私钥提取,
$ cat id_rsa_nc_sftp | sed '/OPENSSH/d' | tr -d '\n'
这里需要去掉私钥文档中的头和尾,并且要去掉换行符。
用这两个提取的公钥和私钥替换掉配置文件中的 ${public_key}
和 ${private_key}
。
导入配置¶
导入配置非常简单,
# sudo -u wwwrun php occ files_external:import /path/to/new/ext_config.json
现在就可以到 Nextcloud 的管理面板中看看新加入的外部存储了。一些属性,比如上面的配置设定挂载为“只读”了,还可以修改。©
本文发表于水景一页。永久链接:<https://cnzhx.net/blog/setup-nextcloud-external-storage/>。转载请保留此信息及相应链接。