SSHFS یک فایل سیستم کاربر محور است که با استفاده از SSH محتوای یک دایرکتوری روی سرور مجازی را به صورت محلی مانت می کند. نتیجه این است که شما می توانید با پوشه های راه دور همانند یک درایو لوکال کار کنید: ویرایش کد، کپی فایل، اجرای اسکریپت و همگام سازی، بدون دردسر آپلود دانلود تکراری.
چه زمانی SSHFS بهترین انتخاب است؟
هنگامی که به یک اتصال امن، سبک، مبتنی بر SSH نیاز دارید، ابزارهای اضافی روی سرور نصب نمی کنید و می خواهید با همان دسترسی های یونیکسی کار کنید. برای تیم های توسعه، دیپلوی سبک، ادیت مستقیم کانفیگ و عیب یابی بسیار کاربردی است.
پیش نیازها
- یک سرور لینوکسی با دسترسی SSH و کاربر دارای مجوز خواندن نوشتن در مسیر هدف
- در سمت کلاینت یکی از سیستم عامل های لینوکس، مک، یا ویندوز
- پورت 22 باز و سرویس sshd فعال روی سرور
نصب SSHFS در توزیع های لینوکسی
Ubuntu و Debian
sudo apt update sudo apt install -y sshfs
RHEL, Alma, Rocky, CentOS 8+
sudo dnf install -y epel-release sudo dnf install -y sshfs
Arch Linux
sudo pacman -S sshfs
نصب در macOS
به کمک Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew install macfuse brew install sshfs
پس از نصب macFUSE ممکن است نیاز به اجازه در Security & Privacy داشته باشید و سیستم یکبار ریبوت شود.
نصب در ویندوز
پیشنهاد پایدار: WinFsp به همراه SSHFS-Win. این ترکیب فایل سیستم FUSE را برای ویندوز فراهم می کند.
- نصب WinFsp از سایت رسمی
- نصب SSHFS-Win (نسخه x64)
- برای مانت گرافیکی می توانید از sshfs-win manager یا دستور
net use
با پروتکل فایل استفاده کنید.
نمونه مانت با PowerShell در ویندوز:
sshfs.exe user@server:/var/www X: -p 22 -o IdentityFile=C:\Users\you\.ssh\id_ed25519 -o StrictHostKeyChecking=no
مانت یک دایرکتوری راه دور در لینوکس
ایجاد نقطه مانت
sudo mkdir -p /mnt/vps_www sudo chown $USER:$USER /mnt/vps_www
اتصال با گذرواژه
sshfs user@server:/var/www /mnt/vps_www
اتصال با کلید خصوصی
sshfs -o IdentityFile=/home/you/.ssh/id_ed25519 \ -o StrictHostKeyChecking=accept-new \ user@server:/var/www /mnt/vps_www
اختصاص مالکیت و مجوزهای فایل
sshfs -o uid=$(id -u) -o gid=$(id -g) \ -o umask=022 \ user@server:/var/www /mnt/vps_www
گزینه های uid
و gid
تعیین می کنند فایل ها از دید سیستم لوکال با چه کاربر گروهی نمایش داده شوند. umask
ماسک مجوزها را مشخص می کند. برای اجازه دیدن فایل ها به کاربران دیگر می توانید از umask=022
استفاده کنید.
اجازه دسترسی سایر کاربران سیستم لوکال
sshfs -o allow_other user@server:/var/www /mnt/vps_www # نیاز به فعال سازی در /etc/fuse.conf # خط زیر را از حالت کامنت خارج کنید: # user_allow_other
قطع اتصال
fusermount -u /mnt/vps_www # روی سیستم های مبتنی بر fuse # یا umount /mnt/vps_www
مانت دائم با fstab
برای مانت خودکار پس از بوت، یک ورودی در /etc/fstab
اضافه کنید. ابتدا با کلیدهای SSH بدون گذرواژه کار کنید تا در بوت مشکلی پیش نیاید.
# فایل /etc/fstab user@server:/var/www /mnt/vps_www fuse.sshfs _netdev,IdentityFile=/home/you/.ssh/id_ed25519,uid=1000,gid=1000,umask=022,reconnect,ServerAliveInterval=30,ServerAliveCountMax=3 0 0
_netdev
به systemd می گوید تا بعد از بالا آمدن شبکه مانت انجام شود.reconnect
تلاش مجدد اتصال در صورت قطع شدن لینک را فعال می کند.ServerAliveInterval/CountMax
نگهداشت اتصال را بهبود می دهد.
مانت هوشمند با systemd automount
برای جلوگیری از تاخیر در بوت می توانید از واحد automount استفاده کنید:
/etc/systemd/system/mnt-vps_www.mount
[Unit] Description=SSHFS mount for /mnt/vps_www After=network-online.target Wants=network-online.target [Mount] What=user@server:/var/www Where=/mnt/vps_www Type=fuse.sshfs Options=IdentityFile=/home/you/.ssh/id_ed25519,uid=1000,gid=1000,umask=022,reconnect [Install] WantedBy=multi-user.target
/etc/systemd/system/mnt-vps_www.automount
[Unit] Description=Automount for /mnt/vps_www [Automount] Where=/mnt/vps_www [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable --now mnt-vps_www.automount # مانت به صورت on-demand انجام می شود
تنظیمات کلاینت SSH برای تجربه بهتر
فایل ~/.ssh/config
را بسازید و تنظیمات اتصال را ساده کنید:
Host myvps HostName server User user IdentityFile ~/.ssh/id_ed25519 ServerAliveInterval 30 ServerAliveCountMax 3 StrictHostKeyChecking accept-new Compression yes
اکنون می توانید به جای user@server از myvps
استفاده کنید:
sshfs myvps:/var/www /mnt/vps_www -o reconnect -o umask=022
بهینه سازی کارایی
- Compression yes: روی لینک های پر تاخیر یا کم پهنای باند مفید است. روی لینک های سریع می تواند کندی ایجاد کند، تست کنید.
- cache: کش کردن ویژگی های فایل سرعت لیست دایرکتوری را بالا می برد:
sshfs -o cache=yes -o attr_timeout=3 -o entry_timeout=3 -o negative_timeout=3 myvps:/var/www /mnt/vps_www
- حداقل درخواست ها: ادیتورهای با عملیات فایل زیاد را طوری تنظیم کنید که write queue را کاهش دهند. در VS Code گزینه
files.autoSave
را روی onFocusChange قرار دهید. - Ciphers: در صورت نیاز به CPU کمتر می توانید چایفر سبک تر روی کلاینت تعیین کنید:
sshfs -o Ciphers=aes128-gcm@openssh.com myvps:/var/www /mnt/vps_www
نکات امنیتی
- ورود با کلید و غیرفعال کردن گذرواژه:
# در sshd_config PasswordAuthentication no PubkeyAuthentication yes
- محدود کردن کاربر به مسیر مشخص با Chroot یا استفاده از مجوزهای دقیق یونیکس
- استفاده از فایروال و محدود کردن پورت 22 به IP های مجاز
- فعال کردن 2FA روی SSH در محیط های حساس
عادات خوب هنگام کار با SSHFS
- برای پروژه های بزرگ، عملیات حجیم را با rsync انجام دهید و SSHFS را صرفا برای ادیت، دیباگ و کارهای سبک نگه دارید.
- تغییر مالکیت و مجوزهای راه دور را با دقت انجام دهید. از
uid
وgid
مناسب در مانت استفاده کنید. - قبل از خاموش کردن سیستم، مانت را جدا کنید تا از باقی ماندن پروسه های معلق جلوگیری شود.
رفع خطاهای متداول
- Permission denied: کلید درست نیست یا کاربر روی سرور مجوز ندارد. مسیر
IdentityFile
و مجوزهای~/.ssh
را بررسی کنید:chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519
- Connection reset: شبکه ناپایدار است. از
reconnect
و ServerAliveInterval استفاده کنید. - Transport endpoint is not connected: مانت را force unmount کنید:
fusermount -u -z /mnt/vps_www
- تاخیر زیاد: Compression را خاموش کنید، cache را فعال کنید، ادیتور را بهینه کنید.
نمونه سناریو های پرکاربرد
ویرایش کد وب روی سرور
sshfs myvps:/var/www/project /home/you/project-remote -o uid=$(id -u) -o gid=$(id -g) -o umask=022 -o reconnect
پروژه را در ادیتور باز کنید و بدون کپی های تکراری تغییر دهید.
به اشتراک گذاری امن فایل بین چند سیستم
کافی است روی هر کلاینت همان مسیر سرور را مانت کنید. مدیریت مجوزها را روی سرور انجام دهید.
اتصال فقط خواندنی
sshfs -o ro myvps:/var/backups /mnt/ro_backups
مقایسه سریع با جایگزین ها
- SFTP در فایل منیجر: ساده ولی یکپارچگی کامل فایل سیستم مثل SSHFS ندارد.
- rsync: بهترین گزینه برای همگام سازی حجیم، ولی فایل سیستم زنده ارائه نمی دهد.
- NFS یا Samba: برای شبکه های داخلی سریع عالی هستند، اما نیاز به سرویس سمت سرور دارند و روی اینترنت به اندازه SSH امن نیستند مگر با تونل.
برای کار روزمره توسعه، ترکیب rsync برای همگام سازی حجیم و SSHFS برای ادیت و دیباگ، هم سریع است هم امن.