SSHFS(1) User Commands SSHFS(1)

SSHFS - کلاینت سامانه فایل مبتنی بر SSH

برای سوار کردن یک سامانه فایل:

sshfs [user@]host:[dir] mountpoint [options]

اگر host یک نشانی عددی IPv6 باشد، باید در قلاب (کروشه) قرار گیرد.

برای پیاده کردن آن:

fusermount3 -u mountpoint   # Linux
umount mountpoint           # OS X, FreeBSD

ابزار SSHFS به شما امکان می‌دهد یک سامانه فایل دوردست را با استفاده از SSH (به‌طور دقیق‌تر، زیرسامانه SFTP) سوار (mount) کنید. بیشتر سرورهای SSH به‌طور پیش‌فرض از این دسترسی SFTP پشتیبانی کرده و آن را فعال دارند، بنابراین استفاده از SSHFS بسیار ساده است - نیازی به انجام کاری در سمت سرور نیست.

به‌طور پیش‌فرض، مجوزهای فایل توسط SSHFS نادیده گرفته می‌شوند. هر کاربری که بتواند به سامانه فایل دسترسی پیدا کند، قادر خواهد بود بر اساس اعتبارنامه‌هایی که برای اتصال به سرور استفاده شده‌اند، هر عملیاتی را که سرور دوردست مجاز می‌داند انجام دهد. در صورتی که این رفتار مطلوب نباشد، بررسی محلی مجوزها می‌تواند با گزینهٔ -o default_permissions فعال شود.

به‌طور پیش‌فرض، تنها کاربری که عملیات سوار کردن را انجام داده می‌تواند به سامانه فایل دسترسی داشته باشد. دسترسی برای سایر کاربران با ارسال -o allow_other فعال می‌شود. در این حالت به احتمال زیاد مایل خواهید بود از -o default_permissions نیز استفاده کنید.

توصیه می‌شود SSHFS را به عنوان یک کاربر عادی اجرا کنید (نه به عنوان root). برای این کار، نقطه اتصال (mountpoint) باید متعلق به کاربر باشد. اگر نام کاربری درج نشود، SSHFS از نام کاربری محلی استفاده خواهد کرد. در صورت حذف دایرکتوری، SSHFS دایرکتوری خانگی (دوردست) را سوار می‌کند. اگر نیاز به وارد کردن گذرواژه باشد، sshfs آن را درخواست خواهد کرد (در واقع فقط ssh را اجرا می‌کند که در صورت نیاز گذرواژه را می‌پرسد).

-o opt,[opt...]
گزینه‌های سوار کردن، برای جزئیات به بخش زیر مراجعه کنید. طیف گسترده‌ای از گزینه‌های SSH نیز می‌توانند در اینجا داده شوند، به صفحات راهنمای sftp(1) و ssh_config(5) مراجعه کنید.
چاپ راهنما و خروج.
چاپ اطلاعات نسخه و خروج.
چاپ اطلاعات اشکال‌زدایی (دیباگ).
معادل با '-o port=PORT'
به دیمن تبدیل نشود، در پیش‌زمینه باقی بماند.
عملیات تک‌رشته‌ای (Single-threaded).
معادل با '-o compression=yes'
فایل پیکربندی جایگزین برای ssh را مشخص می‌کند.
-1
معادل با '-o ssh_protocol=1'
اتصال مجدد خودکار به سرور در صورت قطع ارتباط. تلاش برای دسترسی به فایل‌هایی که قبل از اتصال مجدد باز شده بودند، با خطا مواجه خواهد شد و باید دوباره باز شوند.
بلافاصله به سرور متصل نشود، تا زمان اولین دسترسی به نقطه اتصال صبر کند.
نوشتن همگام (synchronous). این کار سرعت را کاهش می‌دهد، اما ممکن است در برخی شرایط مفید باشد.
تنها داده‌هایی را بخواند که دقیقاً درخواست شده است، به جای اینکه برای پیش‌بینی درخواست خواندن بعدی، داده‌های بیشتری را از پیش بخواند.
خواندن همگام دایرکتوری (readdir). این کار سرعت را کاهش می‌دهد، اما ممکن است در برخی شرایط مفید باشد.
-o workaround=LIST
راهکار موقت (workaround) مشخص‌شده را فعال می‌کند. برای برخی اطلاعات بیشتر به بخش Caveats در زیر مراجعه کنید. مقادیر ممکن عبارتند از:
شبیه‌سازی بازنویسی یک فایل موجود از طریق حذف و تغییر نام.
وادار کردن rename به شکست با خطای EXDEV به جای EPERM پیش‌فرض، تا امکان جابجایی فایل‌ها بین سامانه‌های فایل دوردست فراهم شود.
دور زدن مشکل سرورهایی که از truncate پشتیبانی نمی‌کنند، با کپی کردن کل فایل، برش دادن (truncate) محلی آن، و فرستادن مجدد آن.
دور زدن مشکل سرورهای معیوبی که از fstat() پشتیبانی نمی‌کنند با استفاده از stat به جای آن.
دور زدن باگ پر شدن بافر ("buffer fillup") در OpenSSH.
دور زدن مشکل سرورهای معیوبی که هنگام ارسال حالت (mode) غیر صفر برای create خطا تولید می‌کنند، از طریق ارسال همیشگی حالت 0.
-o idmap=TYPE
نحوه نگاشت UID/GIDهای دوردست به مقادیر محلی. مقادیر ممکن عبارتند از:
عدم ترجمه فضای شناسه (پیش‌فرض).
نگاشت UID/GID کاربر دوردست به UID/GID کاربری که سوار کردن را انجام می‌دهد.
ترجمه UIDها/GIDها بر اساس محتویات --uidfile و --gidfile. -o uidfile=FILE فایل حاوی نگاشت‌های username:uid برای -o idmap=file
-o gidfile=FILE
فایل حاوی نگاشت‌های groupname:gid برای -o idmap=file
-o nomap=TYPE
همراه با idmap=file، نحوه برخورد با نگاشت‌های ناموجود:
هیچ نگاشت مجددی انجام ندهد
یک خطا بازگرداند (پیش‌فرض)
-o ssh_command=CMD
اجرای CMD به جای 'ssh'
-o ssh_protocol=N
پروتکل ssh برای استفاده (پیش‌فرض: 2)
-o sftp_server=SERV
مسیر سرور یا زیرسیستم sftp (پیش‌فرض: sftp)
-o directport=PORT
اتصال مستقیم به PORT بدون گذر از ssh
-o vsock=CID:PORT
اتصال مستقیم با استفاده از vsock به <CID:PORT> بدون گذر از ssh
برقراری ارتباط از طریق stdin و stdout بدون استفاده از شبکه. برای سوار کردن سیستم‌فایل محلی روی سمت دوردست مفید است. یک مثال با استفاده از دستور dpipe عبارت است از: dpipe /usr/lib/openssh/sftp-server = ssh RemoteHostname sshfs :/directory/to/be/shared ~/mnt/src -o passive
با تنظیم این گزینه، تلاش‌ها برای فراخوانی link(2) با کد خطای ENOSYS شکست می‌خورند.
تبدیل پیوندهای نمادین مطلق در سمت دوردست به پیوندهای نمادین نسبی. این بدان معناست که اگر مثلاً در سمت سرور /foo/bar/com یک پیوند نمادین به /foo/blub باشد، SSHFS مقصد پیوند را در سمت کلاینت به ../blub تبدیل می‌کند.
رد کردن مقصدهای پیوند نمادینی که مطلق هستند یا شامل مؤلفه‌های .. می‌باشند. هنگامی که با یک پیوند نمادین مسدودشده مواجه شود، readlink مقدار EPERM را بازمی‌گرداند. این گزینه به‌طور پیش‌فرض فعال است تا از وادار کردن سیستم محلی به خواندن یا نوشتن فایل‌ها توسط سرور مخرب از طریق مقصدهای دست‌کاری‌شده پیوند نمادین جلوگیری کند. توجه داشته باشید که این گزینه سخت‌گیرانه‌تر از transform_symlinks است: این دو گزینه معمولاً نباید با هم ترکیب شوند، زیرا نتایج تبدیل‌شده اغلب شامل .. هستند و توسط مهارسازی (containment) رد خواهند شد.
غیرفعال کردن مهارسازی پیوند نمادین و مجاز شمردن تمام مقصدهای پیوند نمادین به صورت دست‌نخورده، از جمله مسیرهای مطلق و مسیرهای حاوی ... فقط در سرورهای کاملاً مورد اعتماد استفاده شود.
دنبال کردن پیوندهای نمادین در سرور، یعنی نمایش آن‌ها به عنوان فایل‌های عادی در کلاینت. اگر یک پیوند نمادین معلق باشد (یعنی مقصد وجود نداشته باشد) رفتار به سرور دوردست بستگی دارد - ورودی ممکن است به عنوان یک پیوند نمادین در کلاینت ظاهر شود، یا ممکن است به عنوان یک فایل عادی که قابل دسترسی نیست نمایان شود.
عدم بررسی وجود 'dir' در سرور
خواندن گذرواژه از stdin (فقط برای pam_mount!)
-o dir_cache=BOOL
فعال‌سازی (yes) یا غیرفعال‌سازی (no) حافظه موقت (کش) دایرکتوری SSHFS. حافظه موقت دایرکتوری نام ورودی‌های دایرکتوری را در خود نگه می‌دارد. فعال‌سازی آن اجازه می‌دهد فراخوانی‌های سیستمی readdir(3) بدون دسترسی به شبکه پردازش شوند.
-o dcache_max_size=N
حداکثر اندازه حافظه موقت دایرکتوری را تعیین می‌کند.
-o dcache_timeout=N
مهلت زمانی حافظه موقت دایرکتوری را به ثانیه تعیین می‌کند.
-o dcache_{stat,link,dir}_timeout=N
مهلت زمانی جداگانه‌ای برای {ویژگی‌ها، پیوندهای نمادین، نام‌ها} در حافظه موقت دایرکتوری تعیین می‌کند.
-o dcache_clean_interval=N
بازه زمانی برای پاک‌سازی خودکار حافظه موقت دایرکتوری را تعیین می‌کند.
-o dcache_min_clean_interval=N
بازه زمانی برای پاک‌سازی اجباری حافظه موقت دایرکتوری در صورت پر شدن را تعیین می‌کند.
این گزینه استفاده از page cache (حافظه موقت محتوای فایل) در هسته را برای این سیستم‌فایل غیرفعال می‌کند. این کار چندین اثر دارد:
1.
هر فراخوانی سیستمی read() یا write() یک یا چند عملیات خواندن یا نوشتن را آغاز خواهد کرد و داده‌ها در هسته ذخیره موقت (کش) نخواهند شد.
2.
مقدار بازگشتی فراخوانی‌های سیستمی read() و write() با مقادیر بازگشتی عملیات خواندن و نوشتن مطابقت خواهد داشت. این امر مثلاً در صورتی مفید است که اندازه فایل از قبل (پیش از خواندن آن) دانسته نباشد؛ مانند سیستم‌فایل /proc.
-o max_conns=N
حداکثر تعداد اتصالات هم‌زمان SSH را برای استفاده تعیین می‌کند. هر اتصال با یک فرایند مجزای SSH برقرار می‌شود. هدف اصلی این قابلیت بهبود پاسخ‌دهی سیستم‌فایل هنگام انتقال فایل‌های حجیم است. در صورت استفاده از بیش از یک اتصال، گزینه‌های password_stdin و passive قابل استفاده نخواهند بود و راهکار موقت buflimit پشتیبانی نمی‌شود.

علاوه بر این، SSHFS چندین گزینه مشترک برای تمام سیستم‌فایل‌های FUSE را می‌پذیرد. این موارد در صفحه راهنمای mount.fuse توضیح داده شده‌اند (به دنبال گزینه‌های "general"، "libfuse specific" و "high-level API" بگردید)..SH "ملاحظات و راه‌حل‌ها (CAVEATS / WORKAROUNDS)"

اگر کارساز SSH از افزونهٔ hardlinks پشتیبانی کند، SSHFS به شما اجازهٔ ایجاد پیوندهای سخت را خواهد داد. با این حال، پیوندهای سخت هنگام مشاهده از طریق نقطهٔ سوارشدهٔ SSHFS همواره به‌صورت فایل‌های مجزا نمایش داده می‌شوند؛ بدین معنی که دارای inodeهای متفاوت و مقدار st_nlink برابر با 1 به نظر خواهند رسید.

برخی از کارسازهای SSH هنگام تغییر نام یک فایل، از بازنویسی اتمیک (atomically overwriting) فایل مقصد پشتیبانی نمی‌کنند. در این حالت، اگر قصد تغییر نام فایلی را داشته باشید و مقصد از قبل وجود داشته باشد، با خطا مواجه خواهید شد. یک راه‌حل این است که ابتدا فایل مقصد حذف شود و سپس تغییر نام صورت گیرد. SSHFS می‌تواند این کار را به‌طور خودکار انجام دهد اگر آن را با -o workaround=rename اجرا کنید. با این وجود، در این حالت همچنان این احتمال وجود دارد که شخص (یا فرایندی) پس از حذف فایل مقصد توسط SSHFS و پیش از آنکه SSHFS فرصت تغییر نام فایل قدیمی را پیدا کند، فایل مقصد را دوباره ایجاد کند. در این شرایط، عملیات تغییر نام همچنان با شکست مواجه خواهد شد.

بیشتر کارسازهای SFTP هنگام شکست در تغییر نام در مرزهای فایل‌سیستم (EXDEV)، تنها یک خطای عمومی «شکست» ("failure") بازمی‌گردانند. sshfs به‌طور معمول این شکست عمومی را به خطای عدم دسترسی (EPERM) تبدیل می‌کند. اگر گزینهٔ -o workaround=renamexdev مشخص شده باشد، شکست‌های عمومی به‌صورت خطاهای EXDEV در نظر گرفته می‌شوند که باعث می‌شود برنامه‌هایی مانند mv(1) پس از شکستِ تغییر نام، برای جابه‌جایی واقعی فایل تلاش کنند.

در برخی موارد، اگر برای مدتی هیچ فعالیتی روی فایل‌سیستم رخ ندهد، ممکن است تلاش‌ها برای دسترسی به نقطهٔ سوارکردن (mountpoint) در SSHFS معلق و قفل (freeze) شوند. این موضوع معمولاً به دلیل قطع شدن اتصال SSH بر اثر عدم فعالیت رخ می‌دهد، بدون اینکه به SSHFS در این باره اطلاعی داده شده باشد. به‌عنوان یک راه‌حل، می‌توانید اتصال را با -o ServerAliveInterval=15 سوار کنید. این کار اتصال SSH را وادار می‌کند تا حتی در صورت نبود فعالیت نیز زنده و فعال باقی بماند.

به‌طور پیش‌فرض، عملیات شبکه در SSHFS بدون مهلت زمانی (timeout) اجرا می‌شوند که بیانگر رفتار پیش‌فرض خود SSH است. در نتیجه، اگر اتصال به میزبان دوردست قطع شود (برای مثال به دلیل جدا شدن کابل شبکه)، عملیات روی فایل‌ها یا پوشه‌های موجود در نقطهٔ سوارکردن تا زمانی که اتصال مجدداً برقرار شود یا به‌طور کامل (مثلاً به‌صورت دستی) بسته شود، مسدود خواهند شد. برنامه‌هایی که تلاش می‌کنند به چنین فایل‌ها یا دایرکتوری‌هایی دسترسی پیدا کنند، معمولاً در این حالت قفل ("freeze") به نظر می‌رسند.

اگر نادیده گرفتن داده‌های در حال خواندن یا نوشتن قابل قبول باشد، یک راه‌حل سریع خاتمه دادن اجباری (kill) به فرایند مسئول sshfs است؛ این کار باعث می‌شود هرگونه عملیات مسدودشده روی فایل‌سیستم سوارشده با خطا پایان یابد و در نتیجه برنامه‌های مربوطه از حالت قفل خارج شوند ("unfreeze"). توجه داشته باشید که از سوی دیگر، پیاده کردن اجباری با fusermount -zu در این حالت کمکی نخواهد کرد و عملیات خواندن/نوشتن را در حالت مسدود باقی می‌گذارد.

برای یک راه‌حل خودکارتر، می‌توان از گزینهٔ -o ServerAliveInterval=15 که پیش‌تر به آن اشاره شد استفاده کرد؛ این گزینه پس از دریافت نکردن پاسخ به مدت ۳ * ۱۵ = ۴۵ ثانیه از میزبان دوردست، اتصال را قطع می‌کند. همچنین با استفاده از گزینهٔ -o reconnect، می‌توان اطمینان حاصل کرد که اتصال پس از آن در سریع‌ترین زمان ممکن مجدداً برقرار می‌شود. همانند مورد قبل، این امر طبیعتاً منجر به از دست رفتن داده‌هایی می‌شود که در زمان قطع اتصال در حال خواندن یا نوشتن بوده‌اند.

برای سوار کردن یک فایل‌سیستم SSHFS از طریق /etc/fstab، کافی است از sshfs به‌عنوان نوع فایل‌سیستم استفاده کنید. (برای حفظ سازگاری با نسخه‌های پیشین، می‌توانید از fuse.sshfs نیز استفاده کنید).

صفحهٔ راهنمای mount.fuse(8).

اگر به راهنمایی نیاز دارید، لطفاً در فهرست پستی <<fuse-sshfs@lists.sourceforge.net>> آن را مطرح کنید (عضویت در https://lists.sourceforge.net/lists/listinfo/fuse-sshfs).

لطفاً هرگونه باگ را در سامانهٔ ردیابی اشکالات GitHub در https://github.com/libfuse/libfuse/issues گزارش دهید.

پروژهٔ SSHFS توسط Nikolaus Rath <<Nikolaus@rath.org>> نگهداری می‌شد، و توسط Miklos Szeredi <<miklos@szeredi.hu>> ساخته شده است.

برای اطلاعات دربارهٔ نگه‌دارندهٔ جدید پیوند https://github.com/libfuse/sshfs را ببینید.

این صفحهٔ راهنما در ابتدا توسط Bartosz Fenski <<fenio@debian.org>> برای توزیع Debian GNU/Linux نوشته شد (اما ممکن است توسط دیگران نیز استفاده شود).