基于 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 -al

lrwxrwxrwx. 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/config
    
    Host fc-server
        HostName fc-server.test
        User fc-test
        IdentityFile ~/.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 许可发布.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据------JavaWeb------FilterListenerAJAXAxiosJSON

Filter Filter简介 定义:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。 作用:它可把对资源(Servlet、JSP、Html)的请求拦截下来从而实现一些特殊功能 过滤器一般完成…

绝区陆--大语言模型的幻觉问题是如何推动科学创新

介绍 大型语言模型 (LLM)(例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等)已展示出为各种应用生成类似人类文本的出色能力。然而,LLM 的一个鲜为人知的方面是它们倾向于“产生幻觉”或生成不正确或没有根据的事实陈述。我不认为这仅仅是一个限制…

苍穹外卖前后端搭建

文章目录 参考开发环境搭建前端环境搭建1、 前端工程基于 nginx2、启动nginx,访问测试后端环境搭建1、从资料中找到后端初始工程:2、用 IDEA 打开初始工程,了解项目的整体结构:数据库环境搭建前后端联调nginx反向代理和负载均衡1、nginx反向代理2、nginx 负载均衡完善登录功…

博客标题:C++中的继承:构建面向对象的基石

目录 ​编辑 引言 继承的基本形式 示例1:基本继承 继承的类型 示例2:不同类型的继承 多重继承 示例3:多重继承 继承与多态性 示例4:继承与多态 结论 结尾 引言 在面向对象编程(OOP)中&#xff…

飞跃边界,尽在掌握 —— Jump Desktop 8 for Mac,远程工作新体验!

Jump Desktop 8 for Mac 是一款强大的远程桌面控制软件,专为追求高效工作与生活平衡的用户设计。它允许您轻松地从Mac设备上远程访问和控制另一台电脑或服务器,无论是跨房间、跨城市还是跨国界,都能实现无缝连接,仿佛操作就在眼前…

TIA博途与威纶通触摸屏无实物仿真调试的具体方法示例

TIA博途与威纶通触摸屏无实物仿真调试的具体方法示例 准备条件: TIA PORTAL V16 S7-PLCSIM V16 EasyBuilderPro V6.9.1 NetToPLCsim V1.2.5 如有需要,可以在这个链接中下载 NetToPLCSim - Browse Files at SourceForge.net538 weekly downloads3 weekly downloads12 weekly d…

参数手册 : PXIe-1095

PXIe-1095 起售价 RMB 97,950.00 产品详细信息 PXI机箱类型: PXIe 机箱电源类型: 交流 混合插槽数量: 5 PXI Express插槽数量: 11 冗余硬件选项: 是 最大系统带宽: 24 GB/s 插槽数量: 18 PXI插槽数量: 0 系统定时插槽: 是 槽冷却能力: 82 瓦 简介 PXIe,18槽&am…

回溯算法-以学生就业管理系统为例

1.回溯算法介绍 1.来源 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。 用回溯算法解决问题的一般步骤: 1、 针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。 2 、确定易于搜…

Vuforia AR篇(八)— AR塔防上篇

目录 前言一、设置Vuforia AR环境1. 添加AR Camera2. 设置目标图像 二、创建塔防游戏基础1. 导入素材2. 搭建场景3. 创建敌人4. 创建脚本 前言 在增强现实(AR)技术快速发展的今天,Vuforia作为一个强大的AR开发平台,为开发者提供了…

探索横河AQ6370E系列光谱仪隐藏功能!---高级标记功能!

横河AQ6370E系列光谱仪的这款光谱仪的传统功能中,其实还隐藏了一个特别实用的功能——高级标记功能!前所未有的方式解析数据与测量信号,不仅带来了全新的测试体验,还提升了测量速度,那么这个功能怎么找到呢&#xff0c…

中国支付清算协会注销5家单位会员资格

7月1日,中国支付清算协会公告显示,按照《中国支付清算协会章程》《中国支付清算协会会员管理办法》等相关规定,经审议,中国支付清算协会决定注销江苏通付盾科技有限公司、北京丰瑞祥信息技术股份有限公司、山东新北洋信息技术股份…

24-7-9-读书笔记(九)-《爱与生的苦恼》[德]叔本华 [译]金玲

文章目录 《爱与生的苦恼》阅读笔记记录总结 《爱与生的苦恼》 《爱与生的苦恼》叔本华大佬的名书,里面有其“臭名昭著”的《论女人》,抛开这篇其他的还是挺不错的,哲学我也是一知半解,这里看得也凭喜好,这里记录一些自…

c++语法之函数重载

引例 我们在C语言里面写add函数的时候,只能支持一种类型的相加,除非我们创建多个add函数: 但是这样写并不方便,于是就有了c的函数重载。 函数重载 函数重载就是可以将多个参数类型、顺序、数量不同,实现逻辑相同的函…

Linux——开发工具

1.yum yum是centos中的一个软件下载安装管理客户端,可以下载需要的软件或者解决依赖关系问题(如动态库)。程序都是来源于一段源代码,为了方便下载,源代码被提前在不同的环境下编译好生成对应的yum软件包,存…

微信小程序毕业设计-书店系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

EPSON LQ80KF II驱动 打印机 0x00000003e3

1.添加打印机 2.按名次选择共享打印机,输入共享打印机ip 3.选择创建新端口 4.选择打印机驱动

音频demo:将PCM数据与alaw、mulaw、g711数据的相互转换

1、README 前言 (截图来源:https://blog.csdn.net/u014470361/article/details/88837776) 我的理解: 首先需要知道的是u-law/a-law是用于脉冲编码的压缩/解压缩算法。而G.711是指在8KHz采样率(单声道)中,使用的u-law或…

192.168.1.1路由器管理系统使用教程

节选自:192.168.1.1路由器管理系统-厂商有哪些-如何使用-无法登录原因-苏州稳联 什么是 192.168.1.1 路由器管理系统? 192.168.1.1 是大多数家庭路由器的默认 IP 地址,用于访问路由器的管理控制台。通过这个管理系统,用户可以配…

Redis数据类型和数据队列

一.Redis数据类型 参考资料:http://www.redis.cn/topics/data-types.html 相关命令参考: http://redisdoc.com/ Redis 是一种基于内存的开源数据结构存储系统,支持多种数据类型,每种数据类型都有自己特定的操作命令。 String(字…

Python 数据容器的对比

五类数据容器 列表,元组,字符串,集合,字典 是否能下标索引 支持:列表,元组,字符串 不支持:集合,字典 是否能放重复元素 是:列表,元组&#…