13. 文件传输与NFS网络文件系统

本章节主要讲述如何将文件在PC主机以及板卡上进行文件的传输。

本章节内容依赖网络传输,需要我们配置板卡的网络环境,具体可查看下列章节配置板卡及电脑

《SSH登录》

本章着重介绍以下方法进行使用

  • MobaXterm

  • FileZilla

  • nfs

  • tftp

13.1. MobaXterm

该方法需要下载 《MobaXterm》 软件。

注意

使用cat用户SSH登录只能传输/home/cat目录下的文件,如果需要传输到其他目前,可以使用root账户登录,具体参考 《root用户SSH登录》

未找到图片
  • 优点:可以轻松的在控制linux的同时,也能进行文件的传输

  • 缺点:仅支持SFTP协议文件传输,无法正确传输链接文件,对于源码移植会有碍

13.2. FileZilla

FileZilla软件获取

PC上需要安装的是客户端,安装完后打开

注意

使用cat用户SSH登录只能传输/home/cat目录下的文件,如果需要传输到其他目前,可以使用root账户登录,具体参考 《root用户SSH登录》

未找到图片
  • 优点:支持的传输协议比较多,较为精细的目录架构,可以让文件传输更方便

  • 缺点:无法正确传输链接文件,对于源码移植会有碍

FileZilla支持的传输协议如下:

未找到图片

13.3. SCP

SCP 是 Secure Copy Protocol(安全复制协议)的缩写,它是一种基于 SSH(Secure Shell)的网络协议,用于在计算机之间安全地传输文件。SCP 提供了加密的传输过程,确保数据传输过程中不会被未授权的第三方截获或篡改。

13.3.1. PC(Ubuntu)和鲁班猫SCP传输

1
2
# xxx为文件名,192.168.103.151为鲁班猫IP,/home/cat为鲁班猫接收目录
scp xxx  cat@192.168.103.151:/home/cat

演示如下:

未找到图片

13.4. TFTP/FTP/SFTP

FTP是File Transfer Protocol的缩写,即文件传输协议,是Internet上使用比较广泛的文件传送协议,为应用层的文件传输协议。主要作用是在服务器和客户端之间实现文件的传输和共享。FTP协议运行在TCP连接上,保证了文件传输的可靠性。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。

TFTP是Trivial File Transfer Protocol的缩写,即简单文件传输协议,是TCP/IP协议族中一种简单的文件传输协议,用来在客户端与服务器之间进行文件传输。TFTP只支持文件传输,不支持交互,没有庞大的命令集,也没有目录列表功能,以及不能对用户进行身份鉴别。

TFTP和FTP一个主要的区别就是它没有交互式,且不进行身份验证。

SFTP是Secure File Transfer Protocol的缩写,即安全文件传输协议,是一种基于可靠数据流(data stream),提供文件存取和管理的网络传输协议。SFTP要求客户端用户必须由服务器进行身份验证,并且数据传输必须通过安全通道(SSH)进行,即不传输明文密码或文件数据。

13.4.1. Windows端查看支持的网络传输传输协议

按快捷键 Win+R ,在弹出的运行窗口中输入 powershellcmd。下面以 powershell 为例进行演示。

FTP:

未找到图片

TFTP:

注意

Windows电脑可能没开启TFTP服务,可以参考以下链接进行开启: https://guanjia.qq.com/knowledge-base/content/1150

未找到图片

SFTP:

未找到图片

使用终端进行文件传输操作比较繁琐,这里就不作详细说明了,有需求的可自行百度。

13.5. NFS

NFS就是Network File System的缩写,即网络文件系统,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。

13.5.1. 搭建局域网环境

在本应用场景中开发主机和板卡需要通过网络互相访问,另外由于NFS文件系统 暴露到公网需要处理很多安全问题,为简化操作,我们把开发主机和板卡连接到 局域网络。关于网络连接相关知识,可参考 《网络连接及静态配置》《网络共享》 章节。

注意

下面的测试需要鲁班猫板卡的PC电脑运行在同一局域网下,可以通过互ping测试进行验证。

13.5.2. Windows与鲁班猫NFS传输

下面的演示,鲁班猫作为nfs服务器,windows作为nfs客户端

13.5.2.1. 鲁班猫服务端操作

13.5.2.1.1. 安装和配置NFS服务端

主机的Ubuntu系统默认没有安装NFS服务,需要使用如下命令安装和配置NFS服务端:

1
2
3
4
5
6
#安装NFS服务
sudo apt install nfs-kernel-server
#配置/etc/exports,添加共享的目录
sudo vim /etc/exports
#在文件最后一行添加需要共享的目录
/home/cat *(rw,sync,no_root_squash,no_subtree_check)

配置如下:

未找到图片
  • /home/cat 是你要共享的目录,注意使用空格与后面的配置隔开

  • * 是通配所有的nfs客户端ip,如果是192.168.1.*网段,可以配置成192.168.1.0/24

  • rw 是可读可写,具体的权限还受文件系统的rwx及用户身份影响。

  • sync 是同时将数据写入到内存与硬盘中,保证不丢失数据

  • no_root_squash 是当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员

  • no_subtree_check 不检查子目录权限,默认配置。

13.5.2.1.2. 重启NFS服务

配置完后重启NFS服务:

1
2
3
4
5
6
#重新加载/etc/exports
sudo /etc/init.d/nfs-kernel-server reload
#重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart
#查看挂载点
showmount -e
未找到图片
13.5.2.1.3. 查看用户uid
1
2
3
4
#查看root用户id
id root
#查看cat用户id
id cat
未找到图片

可以看出root用户的uid和gid都为0,cat用户的uid和gid都为1000。

13.5.2.2. Windows客户方操作

13.5.2.2.1. 启用nfs服务
未找到图片
13.5.2.2.2. 伪造UID

因为NFS服务没有用户验证的功能,所以会将客户端映射成匿名用户,造成的现象是你连上nfs服务后对于共享目录属于其他人,一般只有只读权限,所以就要伪造UID,让nfs认为你是该目录的所有者,这样就有读写权限。

上述鲁班猫操作中已经获得了root用户和cat用户的id了,下面演示在Windows修改注册表为cat用户的id。

Win+R 键,在弹出的运行窗口中输入 regedit。在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default 下新建两个QWORD(64)位值,添加值 AnonymousGid ,值为1000, AnonymousUid ,值为1000。然后 重启

未找到图片
13.5.2.2.3. 映射到Windows上
未找到图片

挂载盘符,IP填写鲁班猫板卡IP:

未找到图片

挂载成功后就可以对目前进行操作了。

13.5.3. Linux与鲁班猫NFS传输

下面的演示,鲁班猫作为nfs服务器,虚拟机的Ubuntu22.04系统作为nfs客户端,测试的虚拟机软件为VMware。

13.5.3.1. 鲁班猫服务端操作

鲁班猫端操作与上述的《Windows与鲁班猫NFS传输》内容中的 鲁班猫服务端操作 一致,此处不进行重复介绍。

13.5.3.2. Linux客户端操作

13.5.3.2.1. 配置虚拟机网络模式

如果开发主机是安装在虚拟机上,注意要在VMware把网络配置 改成“桥接模式”,见下图,若修改了该配置,需要重启虚拟机才生效。

未找到图片

根据开发主机的ip和子网掩码,我们可以判断开发主板处于192.168.103.*的网段中, 我们只要保证开发主机网络也在同一个局域网网段中,就能让它们通信。

13.5.3.3. 安装NFS客户端

开发主机开启NFS服务后,我们还需要在板卡安装NFS客户端,来让板卡使用NFS服务。

执行安装NFS客户端命令:

1
sudo apt install -y nfs-common

查看NFS服务器(鲁班猫)的共享目录

在板卡上执行“showmount -e +“NFS服务器IP””命令。这里的NFS服务器IP为鲁班猫IP,虚拟机的IP为192.168.103.147,处于同一局域网。

1
showmount -e 192.168.103.129

如下图:

未找到图片
13.5.3.3.1. 临时挂载NFS文件系统

使用mount命令挂载NFS服务器的共享目录到/mnt目录下:

注意

需要把下面的192.168.103.129设置为用户实际网络环境下的NFS服务器IP(鲁班猫IP)

1
sudo mount -t nfs 192.168.103.129:/home/cat /mnt
未找到图片

以上命令使用的各个参数如下:

  • -t nfs:指定挂载的文件系统格式为nfs。

  • 192.168.103.129:指定NFS服务器的IP地址。

  • /home/cat:指定NFS服务器的共享目录。

  • /mnt:本地挂载目录,即要把NFS服务器的共享目录映射到当前虚拟机的/mnt目录下。最好新建一个文件夹用于挂载。

使用这种方式挂载目录只是临时的,板卡在重启后需要重新挂载该NFS目录才能访问。

13.5.3.3.2. 取消挂载

我们完成文件的传输之后,或者NFS服务端掉线了,此时不需要挂载NFS服务端目录,可以对目录使用umount命令取消挂载,示例如下:

1
sudo umount /mnt
未找到图片

注意

使用该命令时以要取消挂载的目录作为参数即可,没有输出表示执行正常。如果在当前挂载的目录进行umount操作,会提示“device is busy”。建议取消挂载时,先切换到家目录“~”,在进行umount操作。