git-annex-shell(1) General Commands Manual git-annex-shell(1) نام (NAME) git-annex-shell - پوسته ورود محدودشده برای دسترسی SSH مختص git-annex خلاصه دستور (SYNOPSIS) git-annex-shell [-c] command [params ...] توضیحات (DESCRIPTION) دستور git-annex-shell یک پوسته محدودشده (restricted shell) مشابه git-shell است که می‌تواند به عنوان پوسته ورود (login shell) برای حساب‌های SSH استفاده شود. از آنجا که نحو آن دقیقاً با نحو git-shell یکسان است، می‌تواند در هر کجا که git-shell استفاده می‌شود به عنوان جایگزین مستقیم به کار رود. به عنوان مثال می‌تواند به عنوان پوسته ورود محدودشده کاربر تنظیم گردد. دستورها (COMMANDS) هر دستوری که در زیر فهرست نشده باشد، مستقیماً به git-shell فرستاده می‌شود. توجه داشته باشید که آرگومان پوشه (directory) باید یک مسیر مطلق باشد، در غیر این صورت نسبت به پوشه خانگی کاربر در نظر گرفته می‌شود. همچنین اولین «/~» یا «/~user/» به پوشه خانگی مشخص‌شده بسط داده می‌شود. configlist directory بخشی از پیکربندی گیت را به همان قالب git config --list چاپ می‌کند. از این خروجی برای دریافت annex.uuid مخزن دوردست (remote repository) استفاده می‌شود. هنگامی که در مخزنی اجرا شود که هنوز annex.uuid ندارد، تا زمانی که یک شاخه git-annex قبلاً به آن push شده باشد، یا اگر فلگ autoinit=1 برای نشان دادن لزوم مقداردهی اولیه استفاده شده باشد، این شناسه ایجاد خواهد شد. p2pstdio directory uuid باعث می‌شود git-annex-shell با استفاده از پروتکل همتا-به-همتای (P2P) گیت-ضمیمه روی stdio ارتباط برقرار کند. شناسه uuid همان شناسه‌ای است که به مخزن در حال ارتباط با git- annex-shell تعلق دارد. notifychanges directory توسط git-annex remotedaemon برای اطلاع از تغییرات refها در مخزن دوردست استفاده می‌شود. gcryptsetup directory gcryptid مخزن را به عنوان یک مخزن gcrypt راه‌اندازی می‌کند. inannex directory [key ...] بررسی می‌کند که آیا همه کلیدهای مشخص‌شده در ضمیمه وجود دارند یا خیر، و در صورت موجود بودن با کد صفر خارج می‌شود. اگر کلید مطمئناً در ضمیمه موجود نباشد با کد ۱ خارج می‌شود. اگر نتواند وضعیت را مشخص کند (مثلاً کلید در حال حذف از ضمیمه باشد) با کد ۱۰۰ خارج می‌شود. تنها توسط ریموت اختصاصی gcrypt استفاده می‌شود. recvkey directory key دستور rsync را در حالت سرور اجرا می‌کند تا محتوای یک کلید را دریافت کرده و در ضمیمه ذخیره نماید. تنها توسط ریموت اختصاصی gcrypt استفاده می‌شود. sendkey directory key دستور rsync را در حالت سرور اجرا می‌کند تا محتوای یک کلید را به بیرون ارسال کند. تنها توسط ریموت اختصاصی gcrypt استفاده می‌شود. dropkey directory [key ...] داده‌های ضمیمه‌شده برای کلیدهای مشخص‌شده را حذف می‌کند. تنها توسط ریموت اختصاصی gcrypt استفاده می‌شود. گزینه‌ها (OPTIONS) --uuid=UUID دستور git-annex از این گزینه برای تعیین UUID مخزنی که انتظار داشت git-annex-shell به آن دسترسی داشته باشد استفاده می‌کند. این کار هم یک بررسی سلامت (sanity check) است و هم در صورت پیکربندی توسط git-annex-update-proxy، به git-annex-shell امکان می‌دهد به عنوان پراکسی دسترسی به ریموت‌ها عمل کند. همچنین می‌توان از گزینه‌های git-annex-common-options(1) نیز استفاده کرد. -- fields=val fields=val.. -- فیلدهای اضافی را می‌توان به این صورت تعیین کرد تا سازگاری با نسخه‌های پیشین git-annex-shell (که این موارد را نادیده می‌گیرند اما در مواجهه با گزینه‌های خط‌تیره‌دار جدید به خطا می‌خورند) حفظ شود. فیلدهایی که در حال حاضر استفاده می‌شوند عبارتند از autoinit= و remoteuuid= قلاب (HOOK) پس از اینکه داده‌ای توسط git-annex-shell از مخزن دریافت یا حذف شود، قلاب .git/hooks/annex-content (یا در مخزن‌های bare قلاب hooks/annex-content) اجرا می‌گردد. در حال حاضر هیچ اطلاعاتی درباره موارد تغییریافته به این قلاب ارسال نمی‌شود. محیط (ENVIRONMENT) GIT_ANNEX_SHELL_READONLY در صورت تنظیم، از هرگونه عملیاتی که منجر به تغییر مخزن git-annex شود جلوگیری می‌کند. توجه داشته باشید که این متغیر مانع از فرستادن دستورات به git-shell نمی‌شود. برای آن منظور، به گزینه زیر نیز نیاز دارید... GIT_ANNEX_SHELL_LIMITED در صورت تنظیم، اجرای git-shell برای مدیریت دستورات ناشناخته را غیرمجاز می‌کند. GIT_ANNEX_SHELL_APPENDONLY در صورت تنظیم، اجازه نوشتن داده‌ها در مخزن git-annex داده می‌شود، اما اجازه حذف داده‌ها از آن داده نخواهد شد. توجه داشته باشید که این متغیر مانع از فرستادن دستورات به git-shell نمی‌شود؛ بنابراین باید گیت را به‌طور جداگانه پیکربندی کنید تا پوش‌هایی را که شاخه‌ها را بازنویسی می‌کنند یا افزایشی نیستند رد کند. قلاب pre-receive در گیت ممکن است برای این منظور کارآمد باشد. در مخزنی که با این روش پیکربندی شده است، فعال کردن annex.securehashesonly پیشنهاد می‌شود. GIT_ANNEX_SHELL_DIRECTORY در صورت تنظیم، git-annex-shell از اجرای دستوراتی که روی پوشه مشخص‌شده عمل نمی‌کنند خودداری خواهد کرد. مثال‌ها (EXAMPLES) برای ساخت فایل ~/.ssh/authorized_keys به طوری که تنها اجازه اجرای git- annex-shell داده شود و نه دستورات دیگر، دستور اصلی را به گزینه -c ارسال کنید: command="git-annex-shell -c \"$SSH_ORIGINAL_COMMAND\"",no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB3NzaC1y[...] user@example.com برای محدودسازی بیشتر git-annex-shell به یک مخزن خاص و قفل کردن کامل آن در حالت فقط‌خواندنی: command="GIT_ANNEX_SHELL_DIRECTORY=/srv/annex GIT_ANNEX_SHELL_LIMITED=true GIT_ANNEX_SHELL_READONLY=true git- annex-shell -c \"$SSH_ORIGINAL_COMMAND\"",restrict ssh-rsa AAAAB3NzaC1y[...] user@example.com طبیعتاً عبارت ssh-rsa AAAAB3NzaC1y[...] user@example.com باید با کلید SSH شما جایگزین شود. همچنین نمونه بالا فرض می‌کند که git-annex-shell در $PATH شما در دسترس است؛ در غیر این صورت از یک مسیر مطلق استفاده کنید. به علاوه توجه فرمایید که مثال بالا به جای فهرست صریحی از عملکردهای نامجاز، از گزینه restrict استفاده کرده است. این قابلیت تنها در نگارش‌های مشخصی از OpenSSH، از نسخه 7.1p2 به بعد کار می‌کند. برای مجاز دانستن صرفاً افزودن اشیاء جدید به مخزن، متغیر GIT_ANNEX_SHELL_APPENDONLY نیز می‌تواند به کار رود: command="GIT_ANNEX_SHELL_DIRECTORY=/srv/annex GIT_ANNEX_SHELL_APPENDONLY=true git-annex-shell -c \"$SSH_ORIGINAL_COMMAND\"",restrict ssh-rsa AAAAB3NzaC1y[...] user@example.com همان‌گونه که در بالا توضیح داده شد، این پیکربندی مانع از نابودی تاریخچه گیت توسط یک مهاجم نخواهد شد. برای مقابله با این موضوع شاید بخواهید با گزینه‌هایی از git-config(1)، برخی عملیات‌ها مانند حذف شاخه و ارسال اجباری (force-push) را غیرمجاز کنید. به عنوان نمونه: git config receive.denyDeletes true git config receive.denyNonFastForwards true با این پیکربندی، کامیت‌های گیت همچنان می‌توانند فایل‌ها را حذف کنند، اما این فایل‌ها در تاریخچه گیت در دسترس باقی می‌مانند و git-annex محتوای آن‌ها را حفظ خواهد کرد. با این حال، اعمال تغییرات در شاخه git-annex می‌تواند روی اطلاعات ردیابی مکان متعلق به git-annex اثر منفی بگذارد و حتی داده‌ها از دست بروند. برای غلبه بر این مشکل قلاب‌های پیچیده‌تری نیاز است؛ به عنوان نمونه قلاب update-paranoid را در توزیع سورس گیت ببینید. همچنین ببینید (SEE ALSO) git-annex(1) git-shell(1) نویسنده (AUTHOR) Joey Hess git-annex-shell(1)