作为一名长期在Linux环境下工作的运维工程师,经常需要在不同发行版之间传输文件是家常便饭。最近在将openKylin和Ubuntu系统进行文件共享时,我系统性地测试了NFS和SSH两种主流方案,并记录下完整的配置过程和避坑要点。这两种方法各有优劣:NFS适合需要频繁交互的大批量文件传输,而SSH则更适合临时性的安全文件交换。
在openKylin上配置NFS服务端是建立共享的第一步。首先需要确认必要的软件包是否安装:
bash复制dpkg -l | grep nfs
输出中必须包含以下关键包:
如果缺少nfs-kernel-server,需要执行安装:
bash复制sudo apt install nfs-kernel-server
注意:不同Linux发行版的包管理命令可能不同,openKylin基于Debian系,使用apt而非yum/dnf
配置共享目录时,编辑/etc/exports文件是核心步骤。我推荐使用以下配置模板:
bash复制/home/nfs_share 192.168.43.0/24(rw,sync,no_subtree_check,no_root_squash)
参数解析:
配置完成后需要重启服务:
bash复制sudo systemctl restart nfs-server
sudo exportfs -av # 验证共享是否生效
Ubuntu作为客户端只需安装基础组件:
bash复制sudo apt install nfs-common
挂载远程共享时,我建议使用以下优化参数:
bash复制sudo mount -t nfs -o rw,hard,intr,timeo=300,retrans=3 192.168.43.11:/home/nfs_share /mnt/nfs
参数说明:
实测经验:添加async参数虽然能提高性能,但在突然断网时可能导致数据丢失,生产环境慎用
通过多年运维实践,我总结出以下性能优化方案:
bash复制# 调整MTU值(需网络设备支持)
ifconfig eth0 mtu 9000
# 启用Jumbo Frame
ethtool -K eth0 rx on tx on sg on tso on
bash复制# 增加NFS线程数
echo "RPCNFSDCOUNT=16" >> /etc/default/nfs-kernel-server
# 调整内存分配
echo "32768" > /proc/sys/net/core/rmem_default
echo "262144" > /proc/sys/net/core/rmem_max
bash复制mount -t nfs -o rsize=65536,wsize=65536,noatime,nodiratime vers=4.2 192.168.43.11:/share /mnt
检查openKylin上的SSH服务状态:
bash复制systemctl status sshd
如果未安装,使用以下命令安装完整套件:
bash复制sudo apt install openssh-server
安全加固建议:
bash复制Port 2222 # 在/etc/ssh/sshd_config中修改
bash复制PermitRootLogin no
bash复制RSAAuthentication yes
PubkeyAuthentication yes
基础传输命令:
bash复制scp file.txt user@remote:/path/to/dest
实用技巧:
bash复制scp -p file.txt user@remote:/path
bash复制scp -r dir user@remote:/path
bash复制scp -l 800 file.txt user@remote:/path # 限速800Kbit/s
bash复制scp -C source_file user@remote:/path
更优雅的方案是使用SSHFS直接挂载远程目录:
bash复制sudo apt install sshfs
mkdir ~/remote_mount
sshfs user@remote:/remote/path ~/remote_mount -o reconnect,ServerAliveInterval=15,Compression=yes
优化参数说明:
卸载时使用:
bash复制fusermount -u ~/remote_mount
| 特性 | NFS | SSH/SCP |
|---|---|---|
| 传输速度 | 快(直接协议) | 中等(加密开销) |
| 安全性 | 需配合防火墙规则 | 原生加密 |
| 配置复杂度 | 较高 | 简单 |
| 适用场景 | 局域网频繁访问 | 跨网络临时传输 |
| 权限管理 | 依赖NFS导出规则 | 基于SSH账户体系 |
| 断点续传 | 不支持 | rsync支持 |
NFS挂载失败:
bash复制rpcinfo -p 192.168.43.11
bash复制sudo ufw status
# 开放NFS端口
sudo ufw allow from 192.168.43.0/24 to any port nfs
bash复制mount -v -t nfs 192.168.43.11:/share /mnt
SCP传输慢:
bash复制scp -c aes128-ctr file user@host:/path
bash复制scp -o NoneEnabled=yes -o NoneSwitched=yes file user@host:/path
SSH连接超时:
bash复制echo "ServerAliveInterval 60" >> ~/.ssh/config
bash复制echo "ClientAliveInterval 60" >> /etc/ssh/sshd_config
结合SSH的rsync是更高效的文件同步方案:
bash复制rsync -avz -e ssh --progress /local/path user@remote:/path
关键参数:
对于长期使用的NFS共享,建议配置/etc/fstab实现开机自动挂载:
bash复制192.168.43.11:/home/nfs_share /mnt/nfs nfs rw,hard,intr,timeo=300,retrans=3 0 0
测试配置是否正确:
bash复制sudo mount -a
bash复制# 限制客户端IP范围
/home/share 192.168.1.100(rw) 192.168.1.101(ro)
# 使用更安全的NFSv4
mount -t nfs4 -o sec=krb5 server:/share /mnt
bash复制# 使用证书替代密码
ssh-keygen -t ed25519
ssh-copy-id user@remote
# 启用两步验证
sudo apt install libpam-google-authenticator
在实际工作中,我通常根据网络环境和安全要求混合使用这些方案。对于开发团队共享代码,NFS提供更好的实时性;而跨机房传输日志时,SSH+rsync则是更安全的选择。