J'ai un serveur de développement git qui se déploie sur un serveur actif lorsque la live
branche est poussée vers. Chaque utilisateur a sa propre connexion et donc le post-receive
hook qui fait le déploiement en direct est exécuté sous son propre utilisateur.
Parce que je ne veux pas avoir à conserver les clés publiques des utilisateurs en tant que clés autorisées sur le serveur live distant, j'ai constitué un ensemble de clés qui appartiennent au système git à ajouter aux serveurs live distants (dans le post-receive
crochet que j'utilise $GIT_SSH
pour définir la clé privée avec l' -i
option).
Mon problème est que, en raison de tous les utilisateurs qui pourraient vouloir déployer pour vivre, la clé privée du système git doit être au moins lisible par groupe et SSH n'aime vraiment pas cela.
Voici un exemple de l'erreur:
XXXX@XXXX /srv/git/identity % ssh -i id_rsa XXXXX@XXXXX
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: id_rsa
J'ai regardé autour de moi en espérant trouver quelque chose pour forcer ssh à simplement passer avec la connexion, mais je n'ai trouvé que des gens disant aveuglément que vous ne devriez tout simplement pas autoriser l'accès à autre chose qu'à un seul utilisateur.
la source
Vous POUVEZ utiliser des fichiers d'identité lisibles par groupe, À MOINS QUE vous ne soyez le propriétaire de la clé. Donc, définissez simplement le fichier d'identité comme appartenant, par exemple, à l'utilisateur root, puis tous vos utilisateurs du référentiel git sont prêts à fonctionner.
Un bon avantage est que vous n'avez pas besoin de sudo - la solution sera plus simple.
Notez que cela se reproduira dans le problème d'origine si vous utilisez root pour pousser vers votre dépôt git.
la source
La clé privée doit rester privée. Vous ne devez permettre à personne de le lire.
dans le
post-receive
script de hook, essayez quelque chose comme ceci:la source
ssh-keygen
,ssh-copy-id user@prod
. Sur la prod:chmod 700 ~/.ssh
,chmod 600 ~/.ssh/authorized_keys
.git checkout...
(sur le prod).post-receive
hook (machine de développement) est géré par l'utilisateur qui pousse un changement (donc sous la permission des utilisateurs) afin qu'ils aient tous des clés différentes, je ne peux pas aider quel utilisateur ce sera. Il y a deuxpost-receive
hooks sur deux serveurs différents en action.