Git shell tidak diaktifkan?

24

Saya mencoba menginstal git server. Ketika saya mengatur shell default untuk pengguna git saya ke / usr / bin / git-shell saya mendapatkan kesalahan saat login sebagai git.

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

Pekerjaan akses berbasis kunci ssh, izin diatur dengan benar.

Pencarian Google tidak menunjukkan apa pun mengenai kesalahan ini.

Saya juga menggunakan metode ini di instalasi sebelumnya dan tidak ada kesalahan yang ditampilkan. Saya juga melihat server yang berfungsi jika memiliki beberapa file tambahan atau konfigurasi tetapi tidak ada yang seperti itu.

Spesifikasi sistem:

  • Gentoo linux (terbaru)
  • Git 1.7.5.3

/ etc / passwd line:

git:x:1002:1004::/home/git:/usr/bin/git-shell
Peter
sumber
git-shelladalah shell yang dibatasi untuk digunakan hanya untuk fungsi push / pull (yaitu git push, git fetchdan git pull). Itu tidak dimaksudkan untuk menjadi interaktif, jadi Anda tidak harus login di shell interaktif. Anda dapat membuatnya agak interaktif dengan menambahkan git-shell-commandsdirektori di rumah pengguna dan menghubungkan beberapa biner di dalamnya. Tapi itu sangat terbatas (tidak ada biner untuk cd, misalnya), jadi alternatif yang lebih baik adalah login sebagai rootatau sudopengguna yang mampu dan lakukan sudo -u git -suntuk mendapatkan bashshell penuh di bawah gitpengguna.
ADTC

Jawaban:

17

Saya menemukan ini setelah berjalan locate git-shell-commands

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

Program sampel dapat dipanggil melalui git-shell. Tempatkan direktori bernama 'git-shell-commands' di direktori home pengguna yang shell-nya adalah git-shell. Kemudian siapa pun yang masuk karena pengguna tersebut dapat menjalankan executable di direktori 'git-shell-commands'.

Perintah yang diberikan:

bantuan: Mencetak nama-nama perintah yang tersedia. Saat dijalankan secara interaktif, git-shell akan secara otomatis menjalankan 'bantuan' saat startup, asalkan ada.

daftar: Menampilkan repositori kosong yang namanya berakhir dengan ".git" di bawah direktori home pengguna. Tidak ada repositori git lain yang terlihat, meskipun mereka dapat dikloning melalui git-shell. 'daftar' dirancang untuk meminimalkan jumlah panggilan ke git yang harus dilakukan dalam menemukan repositori yang tersedia; jika pengaturan Anda memiliki repositori tambahan yang seharusnya dapat ditemukan pengguna, Anda mungkin ingin memodifikasi 'daftar'.

Jadi saya menjalankan perintah berikut sebagai root:

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

Saya kemudian dapat menjalankan yang berikut sebagai gitpengguna:

[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

Sekarang saya tidak melihat apa bantuan dan daftar yang baik, tetapi login berhasil. :)

David
sumber
1
harus ada repositori telanjang di direktori home pengguna untuk "daftar" untuk melakukan apa pun (sesuai readme)
michael
4

Saya hanya harus lakukan # mkdir ~git/git-shell-commandskemudian su gitbekerja untukgit 1.8.1.5-r1

pamammer
sumber
1
Ya itu berhasil. Sekarang Anda berada di shell git. Lalu apa? Sama sekali tidak berguna untuk interaksi kecuali Anda menyinkronkan beberapa binari di dalam git-shell-commandsfolder. Saya pikir lebih bermanfaat untuk melewatkan semua itu dan melakukannya sudo -u git -sagar Anda mendapatkan bashshell penuh dengan akses ke semua binari. Anda juga tetap berada di direktori saat ini.
ADTC
3

Jika Anda melihat kode yang memicu pesan kesalahan itu (yang tampaknya berbeda di versi Git yang lebih lama):

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."); 

ini seharusnya menjadi isu yang tepat di direktori git-shell.

Pengguna harus telah membaca dan menjalankan izin ke direktori untuk menjalankan program di dalamnya.

VONC
sumber
... seperti yang tertulis di pesan kesalahan, sebenarnya. (-:
JdeBP
@ JdeBP: maaf;) @Peter dan saya kira Anda memang memiliki ~/git-shell-commandsizin yang tepat?
VonC