Hur man fixar Git med fel SSH-nyckel och konto

0
212

När du ansluter till en fjärransluten Git-server, som Github, måste din klient autentisera använder HTTPS- eller SSH-baserade tokens. Om du använder den sistnämnda kan du stöta på problem med nyckelhantering, inklusive att Git använder fel SSH-nyckel och loggar in dig på ett annat konto.

Vad är problemet?

Om du inte har en SSH-nyckel alls på ditt konto kommer du nästan säkert att få följande felmeddelande när du försöker trycka :

Tillstånd nekad (publickey). fatal: Kunde inte läsa från fjärrarkivet.

Detta är förmodligen det vanligaste Git-misstaget, och lösningen på detta är enkelt att ställa in en SSH-nyckel för ditt konto.

Men du kan också stöta på ett mycket liknande felmeddelande, även efter att ha en SSH-nyckel korrekt inställd. Om du använder flera Git-konton kan du få det här felet:

Behörighet till användarnamn/Repository.git nekad till annat konto. fatal: Kunde inte läsa från fjärrarkivet.

I det här fallet har Github accepterat din SSH-nyckel, men den fungerar fortfarande inte korrekt; även om din lokala git-repo är konfigurerad att använda rätt e-postadress, om du ger den fel nyckel kommer den att autentisera dig som fel användare. Detta skiljer sig fundamentalt från det första felet. Det är inte “tillstånd nekad,” men istället “tillstånd nekad till konto.”

Annons

Detta kan vara ett problem om du har flera konton och behöver använda separata nycklar för vart och ett av dem. På grund av hur SSH-autentisering fungerar, kommer den fortfarande att “logga in dig” till Git’s fjärrserver, men som fel användare. När Github kontrollerar om den användaren har tillgång till förvaret kommer det troligen att misslyckas, vilket ger felet att ditt konto inte har behörighet att använda ditt eget repo.

Lösningen är att korrekt hantera flera SSH-nycklar , så att din git-klient inte skickar fel nyckel till servern. Du kan göra detta genom att redigera SSH’s konfigurationsfiler.

Se till att Git är korrekt konfigurerad

Först och främst vill du se till att ditt repo är konfigurerat för att använda rätt e-postadress och användarnamn. Du kan kontrollera det från Git config:

git config –list

Och ställ in namnet och e-postadressen för denna repo (eller använd –global för att ställa in den för alla repor):

git config user.name “Name” git config user.email “email@gmail.com”

Om du inte har SSH-nyckelproblem kan detta vara allt som krävs.

Redigering ~/.ssh/config

Om du inte redan har en befintlig nyckel som du vill använda, måste du skapa en ny nyckelfil för ditt konto. Om du gör det måste du flytta eller byta namn på den rätta till ~/.ssh så att den inte kommer i konflikt med din standard-id_rsa. I det här fallet skapar vi en ny nyckel som heter “github”:

ssh-keygen -t rsa -f ~/.ssh/github

Annons< br>

För att använda flera SSH-nycklar måste du redigera ~/.ssh/config och ställa in ett nytt värdblock för Github som pekar på nyckelfilen du just skapade. SSH kommer att använda detta för att välja den SSH-nyckel den ska använda.

Host main Hostname github.com IdentityFile ~/.ssh/github IdentitiesOnly ja Host gamla värdnamn github.com IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes

Om du bara har ett värdblock för den nya nyckeln, borde du inte behöva göra något annat och kommer att kunna ansluta till Github nu. Om du har flera block för olika nycklar, måste du redigera ditt förvars fjärrkontroll så att github.com ersätts med namnet på värdblocket i SSHs konfigurationsfil. Detta kommer att manuellt välja en nyckel istället för att förlita sig på en motstridig sökning.

git remote remove origin git remote add origin git@main:username/repository.git

Felsökning

Efter att ha ställt in SSH-värdkonfigurationen och konfigurerat dina fjärrkontroller, bör Git använda rätt SSH-nyckel när du trycker. Om du fortfarande har problem kan du felsöka problemet genom att manuellt ställa in SSH-kommandot som Git använder för en skalsession med GIT_SSH_COMMAND miljövariabeln.

GIT_SSH_COMMAND='ssh -i ~/.ssh/github -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Du vill också kontrollera och se till att Git använder nyckeln från den plats du förväntar dig. På Windows kan denna plats variera mycket beroende på vilken programvara du använder Git genom. Med GUI-klienten Fork använde den till exempel Windows SSH-agenten som standard, men jag hade konfigurerat en ny SSH-nyckel som den använde istället.