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:
/home/git/test.git
git remote add test ssh://git@serverIp:/home/git/test.git
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:
'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.
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
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:
/var/log/auth.log
,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
.
J'ai personnellement eu 2 problèmes différents avec ceci:
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
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 ").
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.
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.