Sözdizimi
chsh -s $(command -v git-shell) <kullanici>
git clone <kullanici>@localhost:/path/to/repo.git
ssh <kullanici>@localhost
Açıklama
Bu kabuk, sınırlandırılmış Git erişimi sağlamak amacıyla SSH hesapları için kullanılan bir oturum açma kabuğudur. Yalnızca çekme/itme (pull/push) işlevselliğini uygulayan sunucu tarafı Git komutlarının ve kullanıcının ev dizinindeki git-shell-commands adlı alt dizinde bulunan özel komutların yürütülmesine izin verir.
Komutlar
git shell, -c seçeneğinden sonra aşağıdaki komutları kabul eder:
git receive-pack <argüman>, git upload-pack <argüman>, git upload-archive <argüman> İstemcinin git push, git fetch veya git archive --remote isteklerini desteklemek için karşılık gelen sunucu tarafı komutunu çağırır.
cvs server Bir CVS sunucusunu taklit eder. Bkz. git-cvsserver(1).
Eğer bir ~/git-shell-commands dizini mevcutsa, git shell kullanıcının ev dizininden "git-shell-commands/
Etkileşimli Kullanım
Varsayılan olarak, yukarıdaki komutlar yalnızca -c seçeneği ile yürütülebilir; kabuk etkileşimli değildir.
Eğer bir ~/git-shell-commands dizini mevcutsa, git shell etkileşimli olarak da çalıştırılabilir (argümansız). git-shell-commands dizininde bir help (yardım) komutu varsa, kullanıcıya izin verilen eylemler hakkında genel bir bakış sunmak için bu komut çalıştırılır. Ardından, kullanıcının git-shell-commands dizinindeki komutlardan herhangi birini girebileceği veya bağlantıyı kapatmak için çıkış yapabileceği bir "git> " istemi sunulur.
Genellikle bu mod, kullanıcıların erişebildikleri depoları listelemelerine, depoları oluşturmalarına, silmelerine, yeniden adlandırmalarına ya da depo açıklamalarını ve izinlerini değiştirmelerine olanak tanıyan bir yönetim arayüzü olarak kullanılır.
Eğer bir no-interactive-login komutu mevcutsa, bu komut çalıştırılır ve etkileşimli kabuk sonlandırılır.
Örnekler
Etkileşimli girişleri devre dışı bırakmak ve bunun yerine bir karşılama mesajı görüntülemek için:
$ 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' "Merhaba $USER! Kimliğinizi başarıyla doğruladınız, ancak ben"
printf '%s\n' "etkileşimli kabuk erişimi sağlamıyorum."
exit 128
EOF
$ chmod +x $HOME/git-shell-commands/no-interactive-login
git-cvsserver erişimini etkinleştirmek için (git-shell-commands dizininin oluşturulması etkileşimli girişlere izin verdiğinden, ön koşul olarak genellikle yukarıdaki no-interactive-login örneğine sahip olunmalıdır):
$ cat >$HOME/git-shell-commands/cvs <<\EOF
if ! test $# = 1 && test "$1" = "server"
then
echo >&2 "git-cvsserver yalnızca \"server\" parametresini işler"
exit 1
fi
exec git cvsserver server
EOF
$ chmod +x $HOME/git-shell-commands/cvs
Ayrıca Bakınız
ssh(1), git-daemon(1), contrib/git-shell-commands/README
Git
git(1) paketinin bir parçasıdır
Git 2.50.1.428.g0e8243 2025-07-22 GIT-SHELL(1)