远程开发的方式有多种,比较方便的就是sftp。但是当22端口不可用时,sftp便不再可行了。这个时候,一种方便的方式就是mount远程目录到本地了。
本文基于CentOS 7 和macOS进行操作,具体版本如下:
服务器版本
#cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
系统版本
macOS Big Sur 版本 11.6 (20G165)
服务器安装配置nfs服务
安装及启动
- 安装nfs服务
 
yum install -y nfs-utils rpcbind
- 启动nfs服务(也可以配置完再启动)
 
systemctl start nfs
systemctl start rpcbind
- 配置随系统自动启动(也可以不配置)
 
systemctl enable nfs
systemclt enable rpcbind
配置可被挂载的目录
- 配置文件位置
 
/etc/exports
- 内容格式
 
可被挂载的目录 可访问的ip或者ip段 (选项)
例子
/home/nemo 10.10.0.18(rw,all_squash,anonuid=9527,anongid=9527,sync,insecure)
解释:/home/nemo是我想共享的目录,可以被10.10.0.18挂载,挂载选项是:rw,all_squash,anonuid=9527,anongid=9527,sync,insecure,no_subtree。具体含义见附录一。ip也是支持多格式的,见附录二。
重启服务,以生效配置
- 重启
nfs服务即可,命令如下: 
systemctl restart nfs
用户端(macOS)的配置
有两种方式,一种是简单粗暴的直接挂载。还有一种是用到再挂载,不用自动取消挂载。
第一种方式,直接挂载
命令如下:
sudo mount -o vers=4 -t nfs SERVER:/EXPORT/DIR /LOCAL/DIR
例如:
sudo mount -o vers=4 -t nfs 192.168.1.2:/share ~/1.2
解释:把192.168.1.2上的/share文件夹映射到本地的~/1.2目录
第二种方式,自动挂载
需要用到automount,索性macOS自带。操作步骤如下:
- 配置需要把挂载的目录放到哪里,修改配置文件:
/etc/auto_master,在文件后边追加如下内容: 
/Users/nemo auto_test
解释:/Users/nemo是我希望挂载的目录存放的位置,auto_test是挂载配置文件名,和/etc/auto_master做相对路径计算。当然也可以写绝对路径,但是在执行df -h的时候就没那么好看了。。。原文:
A map name beginning with / is the pathname of a file containing the map, otherwise the name represents a map to be found as a file in /etc or to be read from Directory Service (and thus from whatever sources Directory Service uses, such as NIS or LDAP servers).
- 创建挂载的配置文件 
/etc/auto_test,内容如下: 
1.2 -rw,vers=4,bg,soft,rsize=32768,wsize=32768 192.168.1.2:/share
解释:
1.2即相对于/etc/auto_master中指定的根目录计算的,绝对路径为:/Users/nemo/1.2。-rw,vers=4,bg,soft,rsize=32768,wsize=32768为选项,具体含义见附录三。192.168.1.2为远程服务器,/share为远程服务器上的绝对路径。
最终本地执行ls /Users/nemo/1.2的效果等同于在服务器上执行ls /share。
- 清空
automount的缓存,使刚创建的配置生效: 
sudo automount -vc
通过df -H -T nfs即可查看到刚挂载上的nfs文件夹了,例如:
Filesystem           Size   Used  Avail Capacity iused     ifree %iused  Mounted on
192.168.1.2:/share   537G    72G   465G    14%  130762 262012710    0%   /Users/nemo/1.2
附录一
rw 可读可写 ro 只读(还与文件系统的rwx有关) sync 数据同步写入到内存与硬盘中 async 数据先暂存于内存当中,不会直接写入硬盘 wdelay 当有写操作,就会检查是否有相关的写操作,并在一起执行(默认设置) no_wdelay 当有写操作就立即执行,通常要与sync配合使用 root_squash 当客户端登陆NFS的身份为root用户时,将客户端的root用户及所属组都映射为匿名用户或用户组(默认设置) no_root_squash 使客户端可以使用root身份及权限来操作共享的目录 all_squash 无论客户端登陆NFS的身份为何,都将映射为匿名用户 no_all_squash 无论客户端登陆NFS的身份为何,都将映射为root用户(默认设置) anonuid 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户 anongid 将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户 secure 使客户端只能从小于1024的tcp/ip端口连接服务端(默认设置) insecure 允许客户端从大于1024的tcp/ip端口连接服务端 subtree 当共享的目录是一个子目录,服务端会检查其父目录的权限(默认设置) no_subtree 当共享的目录是一个子目录,服务端不检查其父目录的权限
附录二
192.168.1.2 指定特定的的IP可以共享nfs目录 * 指定所有网段及ip都可以共享nfs目录 192.168.1.* 指定子网中的特定主机可以共享nfs目录 192.168.1.0/24 指定子网中的所有主机都可以共享nfs目录 example.com 指定域名的主机可以共享nfs目录
附录三
见:https://linux.die.net/man/5/nfs
参考
- (Linux)远程挂载网络磁盘详解—nfs共享
 - MacOS自动挂载nfs服务器共享目录
 man automountman auto_masterman mount- Establishing predefined NFS mounts
 
《“使用nfs挂载远程目录到本地进行开发的攻略 基于CentOS7、macOS”》 有 1 条评论
实测,自动挂载没啥意义,macOS会在连接不可用时提示挂载不可用。 当连接可用时,自动恢复挂载的可用性。基本就是无感的状态。