博客 / Others/ Linux 使用 SSHFS 挂载远程目录并配置开机自动挂载

Linux 使用 SSHFS 挂载远程目录并配置开机自动挂载

Linux 使用 SSHFS 挂载远程目录并配置开机自动挂载

SSHFS 简介与优势

SSHFS(SSH Filesystem)是一种基于 SSH 协议的用户空间文件系统,它允许你将远程主机上的目录挂载到本地,如同操作本地文件一样便捷。由于底层使用 SSH 协议进行加密传输,它在安全性上具有保障。

主要优势包括:

  • 操作便捷:无需手动下载、修改再上传远程文件,可直接在本地挂载点进行读写,修改会自动同步到远程主机。
  • 安全性高:依托 SSH 协议的安全机制,数据传输过程加密。
  • 适用场景广泛:可用于扩展本地存储(如网站附件目录)、跨服务器文件共享、开发环境同步等。

安装与准备

在开始之前,请确保满足以下条件:

  1. 本地与远程主机均已安装 SSH 服务(如 OpenSSH)。
  2. 本地系统已加载 FUSE(Filesystem in Userspace)内核模块。可通过以下命令检查:
lsmod | grep fuse

若无输出,则需要安装 fuse 模块(例如在 Ubuntu 上使用 sudo apt install fuse)。

安装 SSHFS:

  • Debian/Ubuntu:sudo apt install sshfs
  • RHEL/CentOS:sudo yum install fuse-sshfssudo dnf install fuse-sshfs
  • 若软件源中未提供,可从 GitHub 下载源码编译安装。

手动挂载与卸载

挂载远程目录

首先在本地创建挂载点:

sudo mkdir /mnt/remote

然后使用 sshfs 挂载远程目录(示例中远程用户为 user,IP 为 111.111.111.111,远程目录为 /home):

sshfs -o allow_other user@111.111.111.111:/home /mnt/remote

选项 -o allow_other 允许其他用户访问挂载点。执行后会提示输入 SSH 密码,成功后即可在 /mnt/remote 中访问远程文件。

卸载目录

使用以下命令卸载:

fusermount -u /mnt/remote

若提示权限不足,可尝试使用 sudo

配置开机自动挂载

要实现开机自动挂载,需完成两个步骤:配置 SSH 免密登录,并在 /etc/fstab 中添加挂载项。

1. 设置 SSH 公钥认证(免密登录)

在本地生成 SSH 密钥对:

ssh-keygen -t rsa

一路回车使用默认设置(也可设置密钥口令增强安全性)。生成后,将公钥上传至远程主机。

推荐方法:使用 ssh-copy-id 命令(自动处理权限和文件追加):

ssh-copy-id -i ~/.ssh/id_rsa.pub user@111.111.111.111

完成后,尝试 SSH 登录验证是否不再需要密码。

2. 在 /etc/fstab 中添加自动挂载项

编辑 /etc/fstab 文件,在末尾添加如下行:

sshfs#user@111.111.111.111:/home /mnt/remote fuse defaults,_netdev,allow_other,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 0 0

参数说明:

  • _netdev:声明此为网络设备,确保网络就绪后再挂载。
  • reconnect:支持自动重连。
  • ServerAliveIntervalServerAliveCountMax:保持 SSH 连接活跃,避免超时断开。

添加后,可使用 sudo mount -a 测试配置是否正确,重启后即可自动挂载。

替代方案:使用 systemd 挂载单元

对于使用 systemd 的系统,可创建挂载单元以实现更灵活的管理。例如创建 /etc/systemd/system/mnt-remote.mount

[Unit]
Description=SSHFS Mount for Remote Home
After=network-online.target
Wants=network-online.target

[Mount]
What=user@111.111.111.111:/home
Where=/mnt/remote
Type=fuse.sshfs
Options=_netdev,allow_other,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,IdentityFile=/home/本地用户/.ssh/id_rsa

[Install]
WantedBy=multi-user.target

然后启用并启动该单元:

sudo systemctl daemon-reload
sudo systemctl enable --now mnt-remote.mount

实用技巧与故障排除

使用 SSH 配置别名简化连接

~/.ssh/config 中为远程主机设置别名:

Host remotehost
    HostName 111.111.111.111
    User user
    IdentityFile ~/.ssh/id_rsa

之后挂载命令可简化为:

sshfs remotehost:/home /mnt/remote

/etc/fstab 中也可使用别名:sshfs#remotehost:/home ...

常见问题

  • 挂载点权限问题:确保挂载点目录存在且用户有访问权限。若需所有用户访问,可添加 -o allow_other,但需确保 /etc/fuse.conf 中已取消 user_allow_other 的注释。
  • 开机挂载失败:检查网络是否已就绪(_netdev 参数)、SSH 免密登录是否配置正确、远程主机 SSH 服务是否允许公钥认证。
  • 连接超时断开:在挂载选项中添加 ServerAliveIntervalServerAliveCountMax 以维持连接。

总结

SSHFS 为跨服务器文件管理提供了安全、高效的解决方案。通过配置 SSH 免密登录与 /etc/fstab 或 systemd 单元,可实现可靠的开机自动挂载,非常适合用于扩展存储、备份同步、远程开发等场景。建议在生产环境中充分测试,并考虑网络稳定性对服务的影响。

发表评论

您的邮箱不会公开。必填项已用 * 标注。