GIT-SHELL(1) Git Manual GIT-SHELL(1)

git-shell - پوسته ورود محدود برای دسترسی امن فقط-گیت از طریق SSH

chsh -s $(command -v git-shell) <user>
git clone <user>@localhost:/path/to/repo.git
ssh <user>@localhost

این یک پوسته ورود برای حساب‌های کاربری SSH است تا دسترسی محدود به گیت را فراهم کند. این پوسته تنها اجازه اجرای دستورات سمت سرور گیت که قابلیت pull/push را پیاده‌سازی می‌کنند، به همراه دستورات سفارشی موجود در یک زیردایرکتوری با نام git-shell-commands در دایرکتوری خانگی کاربر را می‌دهد.

دستور git shell دستورات زیر را پس از گزینه -c می‌پذیرد:

git receive-pack <argument>, git upload-pack <argument>, git upload-archive <argument>

دستور سمت سرور متناظر را برای پشتیبانی از درخواست git push، git fetch یا git archive --remote کلاینت فراخوانی می‌کند.

cvs server

شبیه‌سازی یک سرور CVS. به git-cvsserver(1) مراجعه کنید.

اگر دایرکتوری ~/git-shell-commands وجود داشته باشد، git shell دستورات سفارشی دیگر را نیز با اجرای "git-shell-commands/<command> <arguments>" از دایرکتوری خانگی کاربر مدیریت خواهد کرد.

به‌طور پیش‌فرض، دستورات بالا تنها با گزینه -c قابل اجرا هستند؛ این پوسته تعاملی نیست.

اگر دایرکتوری ~/git-shell-commands وجود داشته باشد، git shell می‌تواند به‌صورت تعاملی (بدون هیچ آرگومانی) نیز اجرا شود. اگر دستور help در دایرکتوری git-shell-commands موجود باشد، برای ارائه نمای کلی از اقدامات مجاز به کاربر اجرا می‌شود. سپس اعلان "git> " نمایش داده می‌شود که در آن می‌توان هر یک از دستورات موجود در دایرکتوری git-shell-commands را وارد کرد، یا برای بستن اتصال دستور exit را وارد نمود.

به‌طور کلی این حالت به‌عنوان یک رابط مدیریتی استفاده می‌شود تا به کاربران امکان دهد مخازنی را که به آن‌ها دسترسی دارند فهرست کنند، مخازن را ایجاد، حذف یا تغییر نام دهند، یا توضیحات و مجوزهای دسترسی مخزن را ویرایش کنند.

اگر دستور no-interactive-login وجود داشته باشد، آن دستور اجرا شده و پوسته تعاملی متوقف می‌شود.

برای غیرفعال کردن ورودهای تعاملی و نمایش پیام خوش‌آمدگویی به‌جای آن:

$ chsh -s /usr/bin/git-shell
$ mkdir $HOME/git-shell-commands
$ cat >$HOME/git-shell-commands/no-interactive-login <<\EOF
#!/bin/sh
printf '%s\n' "Hi $USER! You've successfully authenticated, but I do not"
printf '%s\n' "provide interactive shell access."
exit 128
EOF
$ chmod +x $HOME/git-shell-commands/no-interactive-login

برای فعال کردن دسترسی git-cvsserver (که عموماً باید مثال no-interactive-login بالا را به‌عنوان پیش‌نیاز داشته باشد، زیرا ایجاد دایرکتوری git-shell-commands ورودهای تعاملی را مجاز می‌سازد):

$ cat >$HOME/git-shell-commands/cvs <<\EOF
if ! test $# = 1 && test "$1" = "server"
then
        echo >&2 "git-cvsserver only handles \"server\""
        exit 1
fi
exec git cvsserver server
EOF
$ chmod +x $HOME/git-shell-commands/cvs

ssh(1), git-daemon(1), contrib/git-shell-commands/README

بخشی از مجموعه git(1)

2026-06-29 Git 2.55.0