Saya ingin dapat menggunakan kunci ssh untuk otentikasi, tetapi masih membatasi perintah yang dapat dieksekusi melalui terowongan ssh.
Dengan Subversion, saya telah mencapai ini dengan menggunakan file .ssh / Authorized_key seperti:
command="/usr/local/bin/svnserve -t --tunnel-user matt -r /path/to/repository",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIetc...
Saya sudah mencoba ini dengan "/ usr / bin / git-shell" di perintah, tapi saya baru saja mendapatkan fatal: What do you think I am? A shell?
pesan kesalahan lama yang funky .
/bin/bash
?Saya bisa berhasil menggunakan git-shell secara langsung dalam file AuthorizedKeys tanpa menggunakan skrip tambahan.
Kuncinya adalah menambahkan
\"
sekitar variabel env.Diuji dalam rhel6 openssh-server-5.3p1-70.el6.x86_64:
sumber
git-shell
, tapi itu mungkin hanya paranoia.Solusi Grawity dapat dengan mudah dimodifikasi untuk bekerja dengan mengganti saluran
dengan garis
Kutipan mengatasi masalah yang dilaporkan di atas, dan mengganti exec dengan git-shell tampaknya sedikit lebih aman.
sumber
git-shell
dirancang untuk digunakan sebagai shell login, sehingga akan menerima-c "originalcommand"
sebagai argumen. Ini tidak terjadi dengan "perintah paksa" di OpenSSH; sebagai gantinya, perintah paksa diteruskan ke shell yang sudah dikonfigurasi.Yang dapat Anda lakukan adalah menulis skrip yang memeriksa
$SSH_ORIGINAL_COMMAND
dan menjalankannya. Contoh dalam bash :sumber
git <cmd>
, bukangit-<cmd>
?man git-shell
(git 1.7.3.4): Saat ini, hanya empat perintah yang diizinkan untuk dipanggil, git-accept-pack git-upload-pack dan git-unggah-arsip dengan argumen tunggal yang diperlukan, atau server cvs (untuk memanggil git -cvsserver).$SSH_ORIGINAL_COMMAND
menjadi tidak valid, dan menyebabkangit-shell
Saya tidak bisa mendapatkan solusi grawity untuk bekerja karena alasan yang sama seperti yang dilaporkan oleh Neil Mayhew (mis. Kutipan tunggal yang dikirim oleh klien git menyebabkan tidak valid
$SSH_ORIGINAL_COMMAND
- saya menggunakangit v1.7.x
)Namun, solusi berikut yang diterapkan oleh @moocode hanya berfungsi:
https://moocode.com/posts/6-code-your-own-multi-user-private-git-server-in-5-minutes
Ruby FTW! :-)
sumber
Untuk kelengkapan, dan karena pertanyaan awal tidak menentukan bahwa akun yang sama harus dapat digunakan untuk hal-hal non-git, jawaban yang jelas adalah untuk digunakan
git-shell
seperti yang dirancang untuk digunakan: atur sebagai shell login (yaitu denganusermod
, in/etc/passwd
) untuk pengguna ssh itu.Jika Anda memiliki satu akun pengguna yang ingin Anda gunakan dua cara:
... maka jawaban lain di utas ini berlaku. Tetapi jika Anda mampu mengalokasikan pengguna terpisah untuk git, maka mengatur shell-nya
git-shell
adalah cara termudah untuk membatasinya, dan sedikit lebih aman karena tidak memerlukan skrip shell tambahan.sumber