نصب، کانفیگ، مانت دائم

SSHFS در سرورهای لینوکس: نصب، کانفیگ، مانت دائم و نکات حرفه ای

اشتراک گذاری در شبکه های اجتماعی

SSHFS یک فایل سیستم کاربر محور است که با استفاده از SSH محتوای یک دایرکتوری روی سرور مجازی را به صورت محلی مانت می کند. نتیجه این است که شما می توانید با پوشه های راه دور همانند یک درایو لوکال کار کنید: ویرایش کد، کپی فایل، اجرای اسکریپت و همگام سازی، بدون دردسر آپلود دانلود تکراری.

SSHFS

چه زمانی 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
اگر sshfs در مخزن توزیع شما موجود نبود، می توانید از بسته fuse3 و sshfs مربوط به همان نسخه استفاده کنید. وجود بسته fuse یک الزام است چون SSHFS یک فایل سیستم کاربر محور بر پایه FUSE است.

نصب در 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 را برای ویندوز فراهم می کند.

  1. نصب WinFsp از سایت رسمی
  2. نصب SSHFS-Win (نسخه x64)
  3. برای مانت گرافیکی می توانید از 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 برای ادیت و دیباگ، هم سریع است هم امن.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

مطالب مرتبط