Git kabuğu etkin değil mi?


24

Git sunucusunu yüklemeye çalışıyorum. Git kullanıcım için varsayılan kabuğu / usr / bin / git-shell olarak ayarladığımda, giriş yaptıktan sonra git hatası alıyorum.

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

Ssh anahtar tabanlı erişim çalışması, izinler doğru ayarlanmış.

Google araması bu hatayla ilgili hiçbir şey göstermiyor.

Ben de bu yöntemi geçmiş kurulumlarda kullandım ve böyle bir hata gösterilmedi. Ayrıca bazı ekstra dosyalar veya config varsa ama böyle bir şey çalışmayan sunucuya baktım.

Sistem spec:

  • Gentoo linux (en son)
  • Git 1.7.5.3

/ etc / passwd satırı:

git:x:1002:1004::/home/git:/usr/bin/git-shell

git-shellyalnızca itme / çekme işlevi için kullanılacak sınırlı bir kabuktur (yani git push, git fetchve git pull). Etkileşimli olması gerekmediğinden etkileşimli bir kabukta giriş yapmamanız gerekir. git-shell-commandsKullanıcının evine bir dizin ekleyerek ve içindeki bazı ikilileri birbirine bağlayarak biraz etkileşimli yapabilirsiniz . Fakat çok sınırlıdır ( cdörneğin, ikili bir dosya yoktur ), bu nedenle daha iyi bir alternatif olarak kullanıcı rootveya sudokullanıcı girişi yapıp kullanıcının altında sudo -u git -stam bir bashkabuk elde etmektir git.
ADTC

Yanıtlar:


17

Çalıştırdıktan sonra buldum locate git-shell-commands

cat /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands/README

Git-shell ile çağrılabilen örnek programlar. 'Git-shell-commands' adında bir dizini, kabuğu git-shell olan bir kullanıcının giriş dizinine yerleştirin. Daha sonra bu kullanıcı olarak giriş yapan herkes 'git-shell-commands' dizininde çalıştırılabilir dosyaları çalıştırabilir.

Verilen komutlar:

yardım: Kullanılabilir komutların adını yazdırır. Etkileşimli olarak çalıştırıldığında, git-shell başlangıçta otomatik olarak 'yardım'ı çalıştıracaktır.

list: Kullanıcının giriş dizini altındaki adı ".git" ile biten herhangi bir çıplak depoyu görüntüler. Git-shell'den klonlanabilmesine rağmen, başka hiçbir git deposu görünmez. 'liste' mevcut depoları bulmak için yapılması gereken çağrı sayısını en aza indirmek için tasarlanmıştır; kurulumunuzda kullanıcı tarafından keşfedilebilmesi gereken ek depolar varsa, 'listeyi' uygun şekilde değiştirmek isteyebilirsiniz.

Bu yüzden aşağıdaki komutları root olarak çalıştırdım:

cp /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands /home/git -R
chown git:developers /home/git/git-shell-commands/ -R
chmod +x /home/git/git-shell-commands/help
chmod +x /home/git/git-shell-commands/list
exit

Daha sonra aşağıdakileri gitkullanıcı olarak çalıştırabildim :

[me@svn ~]$ su git
Password:
Run 'help' for help, or 'exit' to leave.  Available commands:
list
git> help
Run 'help' for help, or 'exit' to leave.  Available commands:
list
git> list
git> exit

Şimdi ne iyi yardım ve listenin ne olduğunu anlayamadım, ancak giriş yapıldı. :)


1
kullanıcıların ev dizinlerinde bir şey yapmaları için "liste" için (sayfaların başına geldiği gibi) çıplak depolar olması gerekirdi
michael

4

sadece yapmak zorunda kaldım # mkdir ~git/git-shell-commandssonra su gitçalıştıgit 1.8.1.5-r1


1
Evet, işe yarıyor. Şimdi git kabuktasın. Sonra ne? git-shell-commandsKlasör içindeki bazı ikilileri birbirine bağlamadığınız sürece etkileşim için tamamen yararsızdır . Tüm bunları atlamak ve tüm ikili dosyalara erişime sahip sudo -u git -stam bir bashkabuk elde etmek için bunu yapmak daha faydalı olur . Ayrıca geçerli dizinde de kalırsınız.
ADTC

3

Bu hata mesajını tetikleyen koda bakarsanız (Git'in eski sürümlerinde farklı görünüyor ):

if (access(COMMAND_DIR, R_OK | X_OK) == -1) {
  die("Interactive git shell is not enabled.\n"
     "hint: ~/" COMMAND_DIR " should exist "
     "and have read and execute access."); 

bu, git-shell dizininde doğru bir sorun olmalıdır.

Kullanıcı, içindeki programları yürütmek için dizine izinleri okumalı ve yürütmelidir.


... tıpkı hata mesajında ​​yazdığı gibi, aslında. (-:
JdeBP

@JdeBP: sorry;) @Peter ve sanırım ~/git-shell-commandsdoğru izinlere sahipsin ?
VonC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.