Arch系统下非root用户登录/按需挂载SSHFS共享并注销卸载的方法
刚好我之前在Arch上折腾过一模一样的需求,完全用官方维护的核心/extra/community仓库工具就能搞定,不用碰AUR的玩意儿,给你一步步拆解清楚:
前提准备
首先得把需要的工具装到位,都是官方仓库里的:
- 安装
fuse-sshfs(属于community仓库,官方维护)和fuse3:sudo pacman -S fuse-sshfs fuse3 - 把你的普通用户加入
fuse组,不然可能没权限挂载:
执行完之后注销再重新登录,组权限才会生效。sudo gpasswd -a $USER fuse
1. 按需挂载(手动触发)
如果不想每次登录都自动挂载,只想用的时候手动启动,可以这么搞:
- 先创建挂载目录(路径随便改,比如
~/remote-files也行):mkdir -p ~/mnt/sshshare - 直接用
sshfs命令挂载,普通用户权限就能执行:sshfs your-remote-user@remote-host:/path/to/remote/share ~/mnt/sshshare - 卸载的话用
fusermount3:fusermount3 -u ~/mnt/sshshare - 嫌手动敲命令麻烦?写个简单的切换脚本就行,比如创建
~/scripts/mount-sshshare.sh:
给脚本加执行权限:#!/bin/bash MOUNT_POINT="$HOME/mnt/sshshare" REMOTE_TARGET="your-remote-user@remote-host:/path/to/remote/share" # 确保挂载点存在 if [ ! -d "$MOUNT_POINT" ]; then mkdir -p "$MOUNT_POINT" fi # 判断当前状态,挂载/卸载切换 if ! mountpoint -q "$MOUNT_POINT"; then sshfs "$REMOTE_TARGET" "$MOUNT_POINT" echo "✅ SSHFS 共享已挂载" else fusermount3 -u "$MOUNT_POINT" echo "❌ SSHFS 共享已卸载" fi
以后直接运行chmod +x ~/scripts/mount-sshshare.sh~/scripts/mount-sshshare.sh就能一键切换挂载状态,还能看到提示。
2. 登录自动挂载 + 注销自动卸载(推荐)
用systemd用户服务可以完美实现“登录就挂、注销就卸”,全程不用root权限,完全符合你的需求:
- 先创建挂载点(和上面一样,路径自己定):
mkdir -p ~/mnt/sshshare - 创建systemd用户服务文件:
~/.config/systemd/user/sshfs-share.service,把下面内容粘进去,记得替换远程用户、主机和共享路径:[Unit] Description=自动挂载SSHFS远程共享 Requires=network.target After=network.target # 确保网络就绪再挂载,避免因网络未通导致挂载失败 Wants=network-online.target After=network-online.target [Service] Type=oneshot RemainAfterExit=yes # 挂载命令,%h会自动替换成你的用户主目录 ExecStart=/usr/bin/sshfs your-remote-user@remote-host:/path/to/remote/share %h/mnt/sshshare # 注销时自动执行卸载命令 ExecStop=/usr/bin/fusermount3 -u %h/mnt/sshshare # 挂载失败也不重试,避免反复弹密码框 Restart=no [Install] # 绑定到用户登录的默认目标,登录时启动 WantedBy=default.target - 启用并启动这个服务:
# 启用服务,下次登录自动生效 systemctl --user enable sshfs-share.service # 现在立即启动服务,不用等下次登录 systemctl --user start sshfs-share.service - 🔑 重要优化:免密码登录
要是每次挂载都要输远程主机的密码太麻烦,配置SSH密钥对就行:- 生成密钥(一路回车,不用设密码):
ssh-keygen -t ed25519 - 把公钥传到远程主机:
ssh-copy-id your-remote-user@remote-host
- 生成密钥(一路回车,不用设密码):
小技巧:检查挂载状态
想看看共享是不是真的挂载上了,可以用:
mount | grep sshfs
或者直接看挂载点里的文件,能看到远程内容就说明成功了。
内容的提问来源于stack exchange,提问作者MountainX
相关产品推荐
相关产品推荐

