基于 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://www.mzph.cn/pingmian/43745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷粒商城-个人笔记(集群部署篇三)

前言 ​学习视频:​Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强​学习文档: 谷粒商城-个人笔记(基础篇一)谷粒商城-个人笔记(基础篇二)谷粒商城-个人笔记(基础篇三)谷粒商城-个人笔记(高级篇一)谷粒商城-个…

古建筑倾斜在线监测系统:科技守护历史的创新实践

​ ​​在文化遗产保护的广阔领域中,古建筑的健康监测占据着举足轻重的地位。然而,传统的监测方法往往受限于布线复杂、安装难度大以及对古建筑本体可能造成的伤害等问题。近年来,一种新型的古建筑倾斜在线监测系统应运而生,它…

Halcon 模糊圆边的找圆案例

Halcon 模糊圆边的找圆案例 基本思路 1.将图像转成灰度图像 2.再观察要找到的区域的灰度值变化,找到前景与背景的具体数值。 3.根据找到的前景与背景的具体数值,增强图像对比度。(使图像变成黑白图片) 4.使用灰度直图工具进行阈值…

用Vue3和Plotly.js绘制交互式3D散点图

本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 Plotly.js 创建 2D 密度图 应用场景介绍 密度图是一种可视化数据分布的图表,它显示了数据点的密度在不同区域的变化情况。在许多科学和工程领域中,密度图被广泛用于探索和分析数据…

5G(NR) NTN 卫星组网架构

5G(NR) NTN 卫星组网架构 参考 3GPP TR 38.821 5G NTN 技术适用于高轨、低轨等多种星座部署场景,是实现星地网络融合发展的可行技术路线。5G NTN 网络分为用户段、空间段和地面段三部分。其中用户段由各种用户终端组成,包括手持、便携站、嵌入式终端、车…

git撤销/返回到某次提交(idea工具 + gitbush)

不多说废话,直接展示使用。 方法一:使用idea工具进行返回 准备某次过度提交 使用idea打开git log 找到要回去的版本 点击右键选到reset 模式选hard,强制回滚 这个时候本地代码已经回归你指定的版本了。 这个时候再进行强制推送&#xff0c…

Drools开源业务规则引擎(三)- 事件模型(Event Model)

文章目录 Drools开源业务规则引擎(三)- 事件模型(Event Model)1.org.kie.api.event2.RuleRuntimeEventManager3.RuleRuntimeEventListener接口说明示例规则文件规则执行日志输出 4.AgentaEventListener接口说明示例监听器实现类My…

09 docker 安装tomcat 详解

目录 一、安装tomcat 1. tomcat镜像的获取 2. docker创建容器实列 3. 访问测试 404错误 4. 解决方案 5. 使用免修改版容器镜像 5.1. 运行实列的创建 5.2. 出现问题及解决: 6. 验证 OK 一、安装tomcat 1. tomcat镜像的获取 docker search tomcat #docker …

SCI二区TOP|蜘蛛黄蜂优化算法(SWO)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2023年,M Abdel-Basset受到蜘蛛黄蜂优化社会行为启发,提出了蜘蛛黄蜂优化算法(Spider Wasp Optimizer, SWO)。 2.算法原理 2.1算法思想 S…

视频监控技术在食品安全监管中的关键应用

视频监控技术在食品安全监管中的关键应用 1、视频监控技术在食品安全监管中的作用 在食品安全监管中,视频监控技术发挥着不可替代的作用。通过安装视频监控系统,可以实现对食品生产、运输、储存等各个环节的实时监控和录像存储。这不仅有助于监管部门及…

Linux的前世今生

Unix的起源和发展 1969年,AT&T贝尔实验室的Ken Thompson和Dennis Ritchie等人开发了Unix操作系统。Unix的设计理念强调小而简洁的工具,文本流和系统模块化,这些理念后来成为Linux开发的重要基础。1973年,Unix用C语言重新编写…

深度学习-数学基础(四)

深度学习数学基础 数学基础线性代数-标量和向量线性代数-向量运算向量加和向量内积向量夹角余弦值 线性代数-矩阵矩阵加法矩阵乘法矩阵点乘矩阵计算的其他内容 人工智能-矩阵的操作矩阵转置(transpose)矩阵与向量的转化 线性代数-张量(tensor…

卷技术还是卷应用?李彦宏给出了明确答案

如何理解李彦宏说的“不要卷模型,要卷应用” 引言 7月4日,2024世界人工智能大会在上海世博中心召开。百度创始人兼CEO李彦宏在产业发展主论坛上呼吁:“大家不要卷模型,要卷应用!”这句话引起了广泛讨论。李彦宏认为&a…

Python股票计算小程序(字符串格式化练习)

要求:打印的第一行使用f控制,第二行打印使用占位符,股价输出保留两位小数。 # 股价计算小程序 name"周氏集团" stock_price19.99 stock_code "9283" stock_price_daily_growth_factor1.2 growth_days7print(f"公司…

【Python进阶】继承进阶和私有权限

目录 一、继承进阶 1、方法重写 2、调用父类方法 3、多层继承 二、私有权限 1、私有属性 2、私有方法 面向对象基础:小白也能看懂的Python基础教程(8)-CSDN博客 一、继承进阶 1、方法重写 当父类的同名方法达不到子类的要求&#x…

Monaco 中添加 CodeLens

CodeLens 会在指定代码行上添加一行可点击的文字,点击时可以触发定义的命令,效果如下: 通过调用 API 注册 LensProvider,点击时触发 Command,首先要注册命令,通过 editor.addCommand () 方法进行注册。三个…

7月9日学习打卡-回文链表,交叉链表

大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不足之…

【微信小程序开发实战项目】——个人中心页面的制作

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

在 PostgreSQL 里如何处理数据的版本跟踪和回滚?

文章目录 一、事务二、保存点三、使用版本控制扩展四、审计表和触发器五、使用时间戳列六、比较和还原数据七、考虑数据备份和恢复八、结论 在数据库管理中,数据的版本跟踪和回滚是非常重要的功能,有助于在数据操作出现错误或需要回滚到特定状态时进行有…

HINet: Half Instance Normalization Network for Image Restoration

论文:HINet: Half Instance Normalization Network for Image Restoration Abstract: 在本文中,我们探讨了实例归一化在低级视觉任务中的作用。 具体来说,我们提出了一个新颖的块:半实例归一化块(HIN 块&…