J'aimerais pouvoir utiliser une clé ssh pour l'authentification, tout en limitant les commandes pouvant être exécutées via le tunnel ssh.
Avec Subversion, j’ai atteint cet objectif en utilisant un fichier .ssh / registered_keys tel que:
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...
J'ai essayé ceci avec "/ usr / bin / git-shell" dans la commande, mais je viens de recevoir le vieux fatal: What do you think I am? A shell?
message d'erreur génial .
/bin/bash
?Je pouvais utiliser avec succès git-shell directement dans le fichier allowedKeys sans utiliser de script supplémentaire.
La clé est d'ajouter
\"
autour de la variable env.Testé dans rhel6 openssh-server-5.3p1-70.el6.x86_64:
la source
git-shell
, mais cela pourrait bien être une paranoïa.La solution de Grawity peut être facilement modifiée afin de fonctionner en remplaçant la ligne.
avec la ligne
Les guillemets traitent des problèmes signalés ci-dessus, et le remplacement de exec par git-shell semble un peu plus sécurisé.
la source
git-shell
est conçu pour être utilisé comme un shell de connexion, afin qu'il reçoive-c "originalcommand"
comme arguments. Cela ne se produit pas avec les "commandes forcées" dans OpenSSH; au lieu de cela, le commande forcée est transmise au shell configuré.Ce que vous pouvez faire, c'est écrire un script qui le vérifie
$SSH_ORIGINAL_COMMAND
et l'exécute. Exemple en bash :la source
git <cmd>
, nongit-<cmd>
?man git-shell
(git 1.7.3.4): Actuellement, seules quatre commandes peuvent être appelées, git-receive-pack, git-upload-pack et git-upload-archive avec un seul argument requis, ou le serveur cvs (pour appeler git -cvsserver).$SSH_ORIGINAL_COMMAND
pour être invalide, et causantgit-shell
de brûler :-(La solution de grawity ne fonctionnait pas pour la même raison que Neil Mayhew (c.-à-d. Les guillemets simples envoyés par le client git causant une erreur
$SSH_ORIGINAL_COMMAND
- j'utilisegit v1.7.x
)Cependant, la solution suivante implémentée par @moocode ne fonctionne que:
https://moocode.com/posts/6-code-your-own-multi-user-private-git-server-in-5-minutes
Ruby FTW! :-)
la source
Pour être complet, et comme la question initiale ne spécifiait pas que le même compte devait être utilisable pour des choses non git, la réponse évidente est d'utiliser
git-shell
tel qu'il a été conçu pour être utilisé: définissez-le comme shell de connexion (c'est-à-direusermod
, dans/etc/passwd
) pour cet utilisateur ssh.Si vous ne possédez qu'un seul compte utilisateur, vous souhaitez utiliser deux méthodes:
... alors les autres réponses de ce fil s'appliquent. Mais si vous pouvez vous permettre d’attribuer un utilisateur distinct à git, alors définir son shell en
git-shell
est le moyen le plus simple de le restreindre. Il est légèrement plus sécurisé car il ne nécessite aucun script supplémentaire.la source