基于 sftp 的 NAS (局域网文件存储服务器)

局域网 NAS (文件存储服务器) 的基本功能有: 能够存储文件, 同时能够通过多个设备访问 (上传/下载) 文件. 这些功能通过 sftp 可以实现. sftp 是基于 SSH 的文件传输协议, SSH 全程加密传输, 使用 公钥 认证 (不使用密码/口令), 能够提供很高的安全性.

上文说到, 在 LVM 和 btrfs 的加持之下, 可以获得很高的存储灵活度. 即使只有 2 块硬盘, 也可以同时使用 RAID 0 (文件存储一份) 和 RAID 1 (文件存储 2 份). 并且, RAID 0 和 RAID 1 占用的存储空间还可以做到动态分配 (在线扩容). 硬盘数量方面也很灵活, 2 块硬盘, 3 块硬盘, 4 块硬盘, 都可以使用这种存储方案, 添加新的硬盘也很方便. 每小时一次 快照, 每月一次 全盘数据检查 (读取), 提高了文件存储的安全性. 这就是使用老旧 e5 主机和廉价二手硬盘手搓的存储服务器. (狗头)


相关文章:

  • 《本地 HTTP 文件服务器的简单搭建 (deno/std)》 https://blog.csdn.net/secext2022/article/details/140305479

  • 《使用多用户增强服务器的安全性》 https://blog.csdn.net/secext2022/article/details/139961897

  • 《局域网聊天软件 matrix》 https://blog.csdn.net/secext2022/article/details/140015712

参考资料: https://www.openssh.com/portable.html

目录

  • 1 目录权限设置
  • 2 GNOME (ArchLinux) PC
    • 2.1 配置 SSH 登录服务器
    • 2.2 使用文件管理器访问服务器的文件
  • 3 Android 手机
    • 3.1 使用 termux 生成 SSH 密钥
    • 3.2 授权 质感文件 app 访问 termux 里面的文件
    • 3.3 配置 SSH 连接服务器
  • 4 总结与展望

1 目录权限设置

对不同的文件分类存放, 计划按照 2 个维度分成 4 类:

  • srv2: 重要数据 (不允许丢失), 可以公开. 比如 本文.

  • srv1: 允许丢失的数据, 可以公开. 比如软件安装包, 很容易下载的电影等视频, 学习资料等.

  • sd2: 重要数据 (不允许丢失), 不能公开. 比如自己的照片.

  • sd1: 允许丢失的数据, 不能公开.

其中是否允许数据丢失, 是一个维度. 是否可以公开, 是另一个维度. 分别创建目录存放.


相关命令:

fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$ pwd
/mnt/data/bf1s/@fct
fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$ ls -al
total 16
drwxr-xr-x. 1 fc-test fc-test  8 Jun 30 11:57 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwxr-xr-x. 1 fc-test fc-test 24 Jun 30 12:55 srv1
fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$ mkdir sd1
fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$ chmod 700 sd1
fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$ ls -al
total 16
drwxr-xr-x. 1 fc-test fc-test 14 Jul  1 06:11 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwx------. 1 fc-test fc-test  0 Jul  1 06:11 sd1
drwxr-xr-x. 1 fc-test fc-test 24 Jun 30 12:55 srv1
fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$ 

其中 mkdir 命令创建新的目录, chmod 命令更改权限, 700 表示只有自己可以访问.

fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ pwd
/mnt/data/bf2s/@fct
fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ ls -al
total 16
drwxr-xr-x. 1 fc-test fc-test 28 Jun 30 11:57 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwxr-x---. 1 root    root    62 Jul  1 06:00 .snapshots
drwxr-xr-x. 1 fc-test fc-test 58 Jun 30 13:04 srv2
fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ mkdir sd2
fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ chmod 700 sd2
fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ ls -al
total 16
drwxr-xr-x. 1 fc-test fc-test 34 Jul  1 06:11 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwxr-x---. 1 root    root    62 Jul  1 06:00 .snapshots
drwx------. 1 fc-test fc-test  0 Jul  1 06:11 sd2
drwxr-xr-x. 1 fc-test fc-test 58 Jun 30 13:04 srv2
fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ sync

在 RAID 1 上进行类似的操作.

fc-test@MiWiFi-RA74-srv:~$ ls -al /mnt/data/bf1s/@fct
total 16
drwxr-xr-x. 1 fc-test fc-test 14 Jul  1 06:11 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwx------. 1 fc-test fc-test  0 Jul  1 06:11 sd1
drwxr-xr-x. 1 fc-test fc-test 24 Jun 30 12:55 srv1
fc-test@MiWiFi-RA74-srv:~$ ls -al /mnt/data/bf2s/@fct
total 16
drwxr-xr-x. 1 fc-test fc-test 34 Jul  1 06:11 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwxr-x---. 1 root    root    62 Jul  1 06:00 .snapshots
drwx------. 1 fc-test fc-test  0 Jul  1 06:11 sd2
drwxr-xr-x. 1 fc-test fc-test 58 Jun 30 13:04 srv2
fc-test@MiWiFi-RA74-srv:~$ 

这就是最终的结果了, 一共 4 个目录, 分别存放不同的文件: sd1srv1 目录位于 RAID 0 上 (文件只存储一份), 存储允许丢失的数据. sd2srv2 位于 RAID 1 上 (在两块硬盘上分别存放一份, 互为镜像), 存储重要数据 (不允许丢失). 由于 RAID 0 (btrfs) 没有开启条带 (也就是单个文件连续存储, 而不是打散成数据块分散存储), 所以如果损坏一块硬盘, RAID 0 大约丢失一半数量的文件 (另一半文件基本完好), 而 RAID 1 不会丢失文件.

其中 sd1sd2 存放不能公开的数据, 只有通过 SSH 登录 (公钥认证) 之后才能访问 (读写). srv1srv2 存放可以公开的数据, 并通过 HTTP 服务器对整个局域网提供下载 (只读), 方便访问.

这种分类存储方案, 在数据安全 (SSH) 和方便访问 (HTTP) 之间取得了平衡, 在防止数据丢失 (RAID 1) 和节省存储空间 (RAID 0) 之间也取得了平衡.

fc-test@MiWiFi-RA74-srv:~$ ln -s /mnt/data/bf1s/@fct/sd1 sd1
fc-test@MiWiFi-RA74-srv:~$ ln -s /mnt/data/bf2s/@fct/sd2 sd2
fc-test@MiWiFi-RA74-srv:~$ ls -allrwxrwxrwx. 1 fc-test fc-test       23 Jul  1 06:13 sd1 -> /mnt/data/bf1s/@fct/sd1
lrwxrwxrwx. 1 fc-test fc-test       23 Jul  1 06:13 sd2 -> /mnt/data/bf2s/@fct/sd2
lrwxrwxrwx. 1 fc-test fc-test       24 Jun 30 11:59 srv1 -> /mnt/data/bf1s/@fct/srv1
lrwxrwxrwx. 1 fc-test fc-test       24 Jun 30 11:59 srv2 -> /mnt/data/bf2s/@fct/srv2

为了方便访问, 可以使用 ln -s 命令创建符号链接.

2 GNOME (ArchLinux) PC

本章节适用于 PC (台式机/笔记本), 以 ArchLinux 操作系统举栗. 别的操作系统也是类似的.

2.1 配置 SSH 登录服务器

  • (1) 生成 SSH 密钥, 比如:

    ssh-keygen -t ed25519 -C fc-server-202406 -f ~/.ssh/id_ed25519-fc-server-202406
    

    详见文章: 《安装 Fedora CoreOS 操作系统》 https://blog.csdn.net/secext2022/article/details/139805083

  • (2) 将 公钥 写入服务器的配置文件, 比如:

    fc-test@MiWiFi-RA74-srv:~$ cat ~/.ssh/authorized_keys.d/sftp
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILPbf/zBsqQw86+uqA9PoL1IlquO04KKrOTpzhRTbvCR fcst-p9-20240701
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIk8koHw0tEFA+frh+uSqijJOv2aRtKodITqgAibaNXE fcst-c6-20240701
    

    每个公钥一行, 如果有多个设备需要登录, 每个设备都有自己的公钥, 就多写几行.

  • (3) 修改本机的 SSH 配置文件, 比如:

    > cat ~/.ssh/configHost fc-serverHostName fc-server.testUser fc-testIdentityFile ~/.ssh/id_ed25519-fc-server-test-202406
    

    然后使用 ssh fc-server 命令测试登录是否成功.

2.2 使用文件管理器访问服务器的文件

GNOME 桌面环境自带的文件管理器, 对 sftp 有很好的支持, 直接就可以使用. (别的桌面环境, 比如 KDE, 应该也可以, 只是窝用的 GNOME, 所以就以 GNOME 举栗. )

相关链接: https://apps.gnome.org/zh-CN/Nautilus/

在这里插入图片描述

点击 其它位置.

在这里插入图片描述

输入服务器地址.

在这里插入图片描述

输入 ssh://fc-server, 点击 连接.

在这里插入图片描述

然后就能看到服务器上的文件了.

在这里插入图片描述

可以按键盘快捷键 Ctrl+D 把位置添加到收藏夹, 方便快速访问.

然后就和访问本地文件基本一样了, 比如视频文件可以直接打开播放. 这边是千兆以太网局域网, 上传/下载速度可达 110MB/s, 跑满带宽了. 窝感觉挺好用哒 ~ 赞 !

3 Android 手机

在手机上可以使用 质感文件 (MaterialFiles) app: https://github.com/zhanghai/MaterialFiles

3.1 使用 termux 生成 SSH 密钥

安装 termux: https://termux.dev/en/

在 termux 中安装 openssh 的命令:

pkg install openssh

然后使用 ssh-keygen 命令生成 SSH 密钥:

在这里插入图片描述

在这里插入图片描述

使用 cat 命令查看 公钥:

在这里插入图片描述

然后将公钥写入服务器的配置文件 (详见上文).

3.2 授权 质感文件 app 访问 termux 里面的文件

在这里插入图片描述

打开质感文件 app.

在这里插入图片描述

点击左上角 “三条横线” 按钮, 打开侧边栏.

在这里插入图片描述

点击 添加存储空间.

在这里插入图片描述

点击 外部存储空间.

在这里插入图片描述

点击左上角 “三条横线” 按钮, 打开侧边栏.

在这里插入图片描述

点击 Termux.

在这里插入图片描述

点击 使用此文件夹.

在这里插入图片描述

点击 允许.

在这里插入图片描述

然后 质感文件 app 侧边栏就会多出一个 home, 这个就是 termux 的文件.

3.3 配置 SSH 连接服务器

在这里插入图片描述

回到这个界面, 点击 SFTP 服务器. 注意不要选错类型了 ! 这几个名称有点像.

在这里插入图片描述

输入服务器信息.

在这里插入图片描述

主机名 填写服务器的 IP 地址. 路径 就是对应的服务器上的文件 (目录) 路径. 名称 就是显示的名称, 只是为了方便显示, 随意填写. 验证 选择 公钥. 用户名 就是通过 SSH 登录服务器使用的用户名.

然后点击 私钥 右边的图标, 来读取私钥文件:

在这里插入图片描述

打开侧边栏.

在这里插入图片描述

点击 home.

在这里插入图片描述

点击右上角 “三个点”.

在这里插入图片描述

点击 显示隐藏文件.

在这里插入图片描述

点击进入 .ssh 目录.

在这里插入图片描述

选择 私钥 文件 (以 .pub 结尾的是 公钥, 选择另一个文件).

选择后会自动返回这个界面:

在这里插入图片描述

点击 连接并添加.

在这里插入图片描述

然后侧边栏出现 fc-server 就是服务器上的文件.

在这里插入图片描述

点击即可访问.

在这里插入图片描述

喵呜 ~~ !

4 总结与展望

基于 sftp 搭建局域网文件存储服务器 (NAS) 还是很简单的, 只需要安装好 Fedora CoreOS 操作系统, 配置好存储 (比如 LVM/btrfs) 即可. SSH 是服务器系统自带的, 只要能通过 SSH 登录服务器, 就自动的获得了一只 NAS, 妙 !

PC 和手机都能通过 sftp 协议来访问服务器上的文件, 使用很方便. 这下 3 只手机和 2 个 PC 的文件就能集中整理存放了. 全部使用 SSH 公钥 加密认证 (登录), 不使用密码 (口令), 显著提高了安全性. 如果需要多人共享使用, 可以在服务器上创建多个用户 (详见文章 《使用多用户增强服务器的安全性》), 通过适当设置文件的 Linux 访问权限, 可以做到互不影响, 保持很高的灵活度与安全性. btrfs 的 RAID 1 和快照等功能, 从多个方面保护了存储的数据 (详见文章 《本地 HTTP 文件服务器的简单搭建 (deno/std)》), 比如一块硬盘突然损坏, 误操作删除文件, 或者遭遇加密勒索恶意软件. LVM 使得添加/更换硬盘十分方便. 作为低成本的文件存储服务器, 挺适合窝等穷人使用的.

此处只实现了 NAS 服务器的基础功能 (文件存储, 多设备访问), 还可以在存储的基础上, 添加一些扩展功能, 这些以后再慢慢完善. 除了文件存储, 服务器还可以方便的通过容器/虚拟机等部署更多应用, 成为多功能的综合服务器.

只使用 RAID 1 和快照来保护存储的数据文件是不够的, 比如无法应对整个服务器损坏/丢失, 火灾/地震/洪水等自然灾害. 还需要有额外的数据备份计划, 比如传说中的 “3-2-1” 备份, 网盘备份, 高可用异地灾备等, 都是可以考虑的发展方向. 加油, 年轻人 !


Windows ?

虽然窝基本不用, 但是在此顺便说一句: sftp 支持 Windows. 至少有 2 种使用方式:

  • (1) https://winscp.net/eng/docs/lang:chs

    winscp 是一个独立的 sftp 客户端软件, 可以用来上传/下载文件.

  • (2) https://github.com/winfsp/sshfs-win

    sshfs-win 的安装更复杂一些, 可以将 sftp 服务器作为网络硬盘使用.


本文使用 CC-BY-SA 4.0 许可发布.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3224364.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何压缩pdf文件大小,怎么压缩pdf文件大小

在数字化时代,pdf文件因其稳定的格式和跨平台兼容性,成为了工作与学习中不可或缺的一部分。然而,随着pdf文件内容的丰富,pdf文件的体积也随之增大,给传输和存储带来了不少挑战。本文将深入探讨如何高效压缩pdf文件大小…

了解PPO算法(Proximal Policy Optimization)

Proximal Policy Optimization (PPO) 是一种强化学习算法,由 OpenAI 提出,旨在解决传统策略梯度方法中策略更新过大的问题。PPO 通过引入限制策略更新范围的机制,在保证收敛性的同时提高了算法的稳定性和效率。 PPO算法原理 PPO 算法的核心…

IDEA如何创建原生maven子模块

文件 -> 新建 -> 新模块 -> Maven ArcheTypeMaven ArcheType界面中的输入框介绍 名称:子模块的名称位置:子模块存放的路径名创建Git仓库:子模块不单独作为一个git仓库,无需勾选JDK:JDK版本号父项:…

策略路由和路由策略的区别详解

先说策略路由也就是 PBR: 它不会影响路由表的生成,设备的路由表是已经存在而且稳定的。 举个例子: 用 TCP/IP 路由技术一书的表述就是:策略路由就是一个复杂的静态路由。 总结:策略路由是一个基于路由表的影响特定数…

微信服务里底部的不常用功能如何优化的数据分析思路

图片.png 昨天下午茶时光,和闺蜜偶然聊起,其实在微信服务底部,有很多被我们忽略遗忘,很少点过用过的功能服务,往往进入服务只为了收付款或进入钱包,用完就走了,很少拉到底部,看到和用…

mirthConnect 常用示例和语法整理

mirthConnect 常用示例和语法整理 1、jolt json常用语法 https://please.blog.csdn.net/article/details/140137463 2、常用方法 2.1 WinningDateUtils 所有的时间工具在WinningDateUtils里面 获取当前时间:var nowStrWinningDateUtils.getStandardNowStr()获取…

Python函数 之 函数基础

print() 在控制台输出 input() 获取控制台输⼊的内容 type() 获取变量的数据类型 len() 获取容器的⻓度 (元素的个数) range() ⽣成⼀个序列[0, n) 以上都是我们学过的函数,函数可以实现⼀个特定的功能。我们将学习⾃⼰如何定义函数, 实现特定的功能。 1.函数是什么…

由于找不到krpt.dll,无法继续执行代码的7种解决方法

krpt.dll 与 Microsoft Office 套件中的 PDF 文档生成和编辑功能有关。它是 Microsoft Office 中的一项关键组件,在 Word、Excel 等应用程序中扮演着重要角色,支持文档转换成 PDF 格式的功能。那么遇到找不到krpt.dll文件或krpt.dll丢失要怎么办&#xf…

鸿蒙语言基础类库:【@ohos.util.ArrayList (线性容器ArrayList)】

线性容器ArrayList 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 …

FunAudioLLM SenseVoice语音转录与CosyVoice语音合成及语音克隆使用案例

参考: https://fun-audio-llm.github.io/ 1、SenseVoice语音转录 在线体验:https://modelscope.cn/studios/iic/CosyVoice-300M 参考:https://github.com/FunAudioLLM/SenseVoice 下载: pip install -U funasr使用: from funasr import AutoModelmodel_dir = "…

连接与隔离:Facebook在全球化背景下的影响力

在当今全球化的背景下,Facebook作为全球最大的社交网络平台,不仅连接了世界各地的人们,还在全球社会、经济和文化中发挥着深远的影响。本文将深入探讨Facebook在全球化进程中的作用,以及其对个体和社会之间连接与隔离的双重影响。…

odoo中的钩子 Hooks

钩子 钩子(Hooks)是一种在特定时间点或特定事件发生时执行自定义代码的机制。它们允许开发者在不修改核心代码的情况下,为Odoo添加自定义功能或扩展现有功能。以下是关于Odoo钩子的一些关键点和常见用法: 一、钩子的类型 pre_i…

CLion学习笔记-cmake编译和多main函数编译

这里就不讲怎么配置clion了 项目名字 pcl_kdtree_search 1.新建一个工程名字自己取,我这里用自己学习pcl的,加一个main函数,这个时候Cmake里边就是这样的。 #声明要求的cmake最低版本 cmake_minimum_required(VERSION 3.19) #声明一个工程…

福建 | 南安帝兴混凝土电子签收的困难和突破

01 发展从来都是从困难开始 混凝土发货单实现无纸化签收,众多业内人士认为这个概念很好,但能否落地却大多抱有怀疑态度,理由多种多样: “行业太传统,接受不了新鲜事物。” “驾驶员年龄偏大,玩不来智能手…

Linux源码阅读笔记09-进程NICE案例分析1

task_nice task_nice函数功能:获取某个进程的nice值,其中nice值为进程的优先级,与静态优先级有关(nicestatic_prio-120)。 nice的取值范围:-20 ~ 19 内核源码 根据内核的注释可以知道:task_n…

el-table封装popver組件,点击列筛选行数据功能,支持筛选,搜索,排序功能

子组件&#xff1a; <template><div class"tableTool" ref"tableTool" click.stop><el-button click"shengFnc">升序</el-button><el-button click"jiangFnc">降序</el-button><el-input v-m…

68.SAP FICO - 记账码学习

目录 定义 用途 配置步骤 定义记账码 - OB41 配置会计科目类型 在会计中&#xff0c;“借”和“贷”是记账符号&#xff0c;代表了记账的方向。而在SAP中却没有大家熟知的记账符号“借”和“贷”&#xff0c;那SAP中如何录入凭证呢&#xff1f;其实&#xff0c;SA…

Redis代替Session实现共享

集群的session共享问题 session共享问题&#xff1a;多台tomcat并不共享session存储空间&#xff0c;当请求切换到不同的tomcat服务时导致数据丢失的问题。 session的替代方案&#xff1a; 数据共享内存存储key、value结构 将redis替换session可以解决session共享问题

大数据基础:Hadoop之HDFS重点架构原理

文章目录 Hadoop之HDFS重点架构原理 一、什么是Hadoop 二、HDFS简介 三、HDFS架构 3.1、NameNode 3.2、SecondaryNameNode 3.3、DataNode 3.4、Client 四、fsimage和editslog合并 五、Block副本放置策略 六、读写流程 6.1、HDFS写文件流程 6.2、HDFS读文件流程 Ha…

tk 文本生成器

import random import tkinter as tk import ttkbootstrap as ttk from tkinter import messagebox import pyperclipdef wenben_run():def generate_text(original_text, length):# 去掉原始文本中的换行符和空格original_text original_text.replace(\n, )original_text or…