web-dev-qa-db-fra.com

git Push to remote repository "Impossible de lire à partir du référentiel distant"

J'ai cherché pendant un certain temps mais je ne trouve pas de solution à mon problème.

J'ai un serveur auquel je peux me connecter via ssh avec le nom d'utilisateur git et un référentiel git local.
Maintenant, je veux pousser mon référentiel local vers un nouveau sur le serveur.

Voici ce que j'ai fait:

  • créé un référentiel git dans /home/git/test.git
  • initialisé le référentiel comme nu
  • ajouté le référentiel distant sur la machine locale
    git remote add test ssh://git@serverIp:/home/git/test.git
  • maintenant j'ai exécuté la commande Push:
    git Push test master

J'ai toujours le

fatal: could not read from remote repository

Please make sure you have the correct access rights
and the repository exists.

Je travaille sur une machine Windows 7 locale et je souhaite télécharger sur un serveur Linux.
Je peux me connecter via ssh avec l'utilisateur git. J'ai également essayé de le faire en tant qu'utilisateur root (pour que les choses fonctionnent une fois) avec le même résultat.
On ne me demande jamais le ssh password.

Je ne sais vraiment pas ce que je fais mal.
Avant d'appeler cela un doublon, j'ai beaucoup cherché ce problème et aucun ne semblait parler du même problème.

mise à jour:

  • "quel git" renvoie/usr/bin/git
  • L'écho PATH inclut/usr/bin
  • les fichiers id_rsa et id_rsa.pub sont tous configurés et transmettent la phrase secrète
  • ssh git @ serverIp qui git-receive-pack fonctionne aussi et retourne/usr/bin/git-receive-pack
  • ssh git @ serverIp ls /home/git/test.git fonctionne
  • tous les répertoires pertinents sont chmod 755
  • git est propriétaire du référentiel
  • le fichier auth.log n'obtient aucune nouvelle entrée sur la commande Push essayée
  • GIT_TRACE = 2 git Le maître du test push renvoie:

    'C:\Program Files (x86)\PuTTY\plink.exe' '-batch' 'git @ serverIp' 'git-receive-pack'\''/home/git/test.git '\' '' fatal: Impossible de lire à partir du référentiel distant. Veuillez vous assurer que vous disposez des droits d'accès appropriés et que le référentiel existe.

31
user1090755

Dans ce cas, utiliser openssh sur PuTTY était la clé.


Réponse originale (conseils pour le débogage)

Je peux me connecter via ssh avec l'utilisateur git.

Cela signifie que cela fonctionne:

ssh git@serverIp

Vous avez une variable HOME définie et des clés publiques/privées ssh (id_rsa/id_rsa.pub) dans %HOME%/.ssh/.

Cette question suggère une URL différente:

git remote set-url test git@serverIp:/home/git/test.git

Assurez-vous d'avoir créé votre dépôt git en tant que git (et non en tant que root, lorsque vous avez créé le compte git, comme dans cette question ).
ssh git@serverIp "which git" devrait renvoyer le chemin de l'exécutable git.

Vérifiez également que tous les répertoires parents ont le bit x (execute) correspondant défini pour l'utilisateur git ou le groupe gitgroup, exécutant ls -ld /home /home/git /home/git/test.git.
De plus, obtenir plus d'informations pour une commande git peut être fait avec:

  • git Push --verbose
    ou:
  • GIT_TRACE=2 git Push test master

Si vous avez une clé ssh privée avec un mot de passe, il serait préférable de tester d'abord ces commandes ssh avec une clé ssh privée et non protégée par mot de passe, pour voir si le problème persiste.
Ou, vous pouvez conserver cette clé ssh protégée par mot de passe, mais revérifiez votre .bashrc comme dans cette réponse .


Pour tout problème de connexion ssh (où le mot de passe de git est nécessaire), vérifiez:


Dans votre cas, puisqu'il fonctionne avec ssh git@serverIp (shell sécurisé interactif), mais pas avec git (qui ouvre un shell sécurisé non interactif), jetez un œil à ce fil , qui fait référence à celui-ci :

Lorsque ssh est démarré avec une ligne de commande, un shell non interactif sans connexion est démarré.
Cependant ...bash n'utilise pas $BASH_ENV dans ce cas, définissez-le dans ~/.ssh/environment (par exemple à /etc/profile) n'aide pas.
Ce que bash fait est la source /etc/bashrc et ~/.bashrc.

Sois sûr que /etc/profile définit le chemin pour git , car un n compte sans connexion peut être utilisé ici (cela semble être le cas ici, puisque ssh git@serverIp "which git" a fonctionné et ssh git@serverIp "git --version" devrait aussi).

Mais vérifiez également le bon problème et testez un chmod 755 sur /home, /home/git et /home/git/test.git.

17
VonC

J'ai personnellement eu 2 problèmes différents avec ceci:

  1. plink (qui est utilisé par git sous Windows) n'accepte pas id_rsa clé privée telle qu'elle est au format OpenSSH 2 => J'ai dû la convertir (en utilisant puttygen) en PuTTY propre .ppk formater et attacher via la boîte de dialogue "Remotes" des extensions Git

  2. J'ai mal spécifié le chemin vers le dossier git, car ma session ssh a été chrootée (il se peut que ce soit un mauvais mot) et j'ai spécifié quel était mon FTP "root" comme "/ ", alors que c'était" /home/www/username/" au lieu.

J'ai compris tout cela en utilisant GIT TRACE=2 comme décrit ci-dessus et également en utilisant procmon pour déterminer la ligne de commande exacte pour plink puis en jouant avec, en ajoutant "-v "option (" verbose ").

6
62mkv

Vous pouvez également vérifier vos identités SSH en faisant:

$ ssh-add -L

J'avais un problème similaire. Il y avait une mauvaise clé dans mes identités, je ne me souviens pas pourquoi. Je supprime simplement toutes mes identités (vous devrez peut-être ajouter à nouveau des clés):

$ ssh-add -D  

Ensuite, j'ai fait pousser/tirer sans problème.

6
Juan Matias

Définissez la variable d'environnement GIT_SSH sur le chemin complet de TortoisePlink.exe (vous devrez peut-être télécharger TortoiseGit pour cela) au lieu de PuTTY plink.exe. Cela permettra à la fenêtre de dialogue contextuelle de demander des informations, c'est-à-dire de confirmer l'empreinte digitale ou d'entrer le mot de passe. Si tu utilises plink.exe via Git, vous ne pouvez pas taper les réponses aux invites plink.exe qui, s'il y a des invites, provoqueront l'erreur fatale que vous avez vue.

0
konyak