Αρχική
» ΒΑΣΙΚΕΣ ΓΝΩΣΕΙΣ
»
Πώς να διορθώσετε το σφάλμα "Άρνηση άδειας (δημόσιο κλειδί)" στο GitHub SSH
Πώς να διορθώσετε το σφάλμα "Άρνηση άδειας (δημόσιο κλειδί)" στο GitHub SSH
Η τρέχουσα τεκμηρίωση αντιμετώπισης προβλημάτων SSH του GitHub, η οποία ελέγχθηκε στις 13 Σεπτεμβρίου 2026, εξακολουθεί να αντιμετωπίζεται Permission denied (publickey)ως αποτυχία ελέγχου ταυτότητας: Το GitHub απέρριψε τη σύνδεση SSH επειδή δεν αποδέχτηκε ένα χρησιμοποιήσιμο δημόσιο κλειδί για τον λογαριασμό και τη σύνδεση που παρουσιάσατε. Ο πιο γρήγορος τρόπος για να το διορθώσετε είναι να επαληθεύσετε τη σύνδεση με μια συγκεκριμένη σειρά αντί να διαγράψετε αμέσως κλειδιά ή να δημιουργήσετε νέα. Η επίσημη σελίδα αντιμετώπισης προβλημάτων "Άρνηση άδειας (δημόσιο κλειδί)" του GitHub συνιστά να ελέγξετε τον διακομιστή, τον χρήστη SSH, το κλειδί που προσφέρεται και εάν το αντίστοιχο δημόσιο κλειδί είναι συνδεδεμένο στον λογαριασμό σας.
Μια καλή επιδιόρθωση έχει δύο παρατηρήσιμα αποτελέσματα. Πρώτον, ssh -T git@github.comπροσδιορίζει τον λογαριασμό GitHub που σκοπεύατε να χρησιμοποιήσετε και αναφέρει επιτυχή έλεγχο ταυτότητας. Δεύτερον, η πραγματική εντολή του αποθετηρίου —όπως git fetch, git pull, git push, ή git clone— λειτουργεί με το αποθετήριο στο οποίο έχετε εξουσιοδότηση πρόσβασης. Η επιτυχής ολοκλήρωση μόνο της πρώτης δοκιμής αποδεικνύει τον έλεγχο ταυτότητας SSH, όχι τα δικαιώματα του αποθετηρίου.
Λίστα ελέγχου γρήγορης διάγνωσης για γρήγορη διάγνωση.
Ελεγχος
Υγιές αποτέλεσμα
Αν αποτύχει
Απομακρυσμένη διεύθυνση URL
Χρήσειςgit@github.com:OWNER/REPOSITORY.git
Διορθώστε τον κεντρικό υπολογιστή ή τον χρήστη SSH πριν αλλάξετε κλειδιά
Τοπικά αρχεία κλειδιών
Υπάρχει ένα υποστηριζόμενο ζεύγος δημόσιου/ιδιωτικού κλειδιού
Δημιουργήστε ένα νέο ζεύγος κλειδιών μόνο εάν δεν έχετε κάποιο που σκοπεύετε να χρησιμοποιήσετε
Πράκτορας SSH
ssh-add -l -E sha256παραθέτει το προβλεπόμενο κλειδί
Ξεκινήστε τον παράγοντα και προσθέστε το ιδιωτικό κλειδί
Λογαριασμός GitHub
Το αντίστοιχο δημόσιο κλειδί εμφανίζεται κάτω από τα κλειδιά SSH και GPG
Προσθέστε το δημόσιο κλειδί στον σωστό λογαριασμό. Εξουσιοδοτήστε το για SSO όταν απαιτείται.
Δοκιμή ελέγχου ταυτότητας
Το GitHub χαιρετά το αναμενόμενο όνομα χρήστη
Χρησιμοποιήστε λεπτομερή έξοδο SSH για να δείτε ποιο κλειδί προσφέρεται στην πραγματικότητα
Λειτουργία αποθετηρίου
Η ανάκτηση, η έλξη, η ώθηση ή η κλωνοποίηση επιτυγχάνονται
Ελέγξτε την πρόσβαση στο αποθετήριο, την ταυτότητα λογαριασμού, το SSO, την απομακρυσμένη διεύθυνση URL ή τους περιορισμούς δικτύου
1. Επαληθεύστε τον προορισμό, τον χρήστη SSH και την απομακρυσμένη διεύθυνση URL
Πριν αγγίξετε τα πλήκτρα σας, επιβεβαιώστε ότι συνδέεστε στο GitHub.com και ότι το όνομα χρήστη SSH είναι κυριολεκτικά git. Το GitHub τεκμηριώνει ότι οι συνδέσεις SSH στο GitHub.com πρέπει να χρησιμοποιούν τον gitχρήστη και όχι το προσωπικό σας όνομα χρήστη GitHub. Μια εντολή όπως ssh -T yourname@github.comαναμένεται να αποτύχει.
git remote -v
ssh -vT git@github.com
Για ένα κανονικό απομακρυσμένο SSH GitHub.com, η διεύθυνση URL θα πρέπει να έχει την εξής μορφή:
git@github.com:OWNER/REPOSITORY.git
Εάν το απομακρυσμένο είναι λάθος, διορθώστε το με τη διαμόρφωση απομακρυσμένου του Git αντί να δημιουργήσετε εκ νέου τα διαπιστευτήρια:
Αποφύγετε επίσης την εκτέλεση συνηθισμένων εντολών Git με sudoή με αυξημένα δικαιώματα. Το GitHub σημειώνει ότι κάτι τέτοιο μπορεί να προκαλέσει την εκτέλεση του Git σε διαφορετικό περιβάλλον χρήστη και, ως εκ τούτου, τη χρήση διαφορετικών κλειδιών SSH από αυτά που ρυθμίσατε. Ο στόχος σε αυτό το στάδιο είναι απλός: η λεπτομερής έξοδος θα πρέπει να εμφανίζει μια προσπάθεια σύνδεσης στη github.comθύρα 22, εκτός εάν ρυθμίσατε σκόπιμα την εναλλακτική λύση θύρας HTTPS που περιγράφεται αργότερα.
2. Επιβεβαιώστε ότι υπάρχει και έχει φορτωθεί ένα χρησιμοποιήσιμο κλειδί
Ελέγξτε τον τοπικό σας κατάλογο SSH πριν δημιουργήσετε οτιδήποτε νέο. Οι τρέχουσες οδηγίες του GitHub συνιστούν να αναζητήσετε πρώτα ένα υπάρχον υποστηριζόμενο ζεύγος κλειδιών.
ls -al ~/.ssh
Ελέγξτε τον κατάλογο SSH για ένα αντίστοιχο ζεύγος ιδιωτικού και δημόσιου κλειδιού πριν δημιουργήσετε ένα άλλο κλειδί.
Τα συνηθισμένα προεπιλεγμένα ονόματα αρχείων δημόσιου κλειδιού περιλαμβάνουν id_ed25519.pub, id_ecdsa.pubκαι id_rsa.pub. Το GitHub δεν υποστηρίζει πλέον κλειδιά DSA. Εάν έχετε ήδη ένα ζεύγος κλειδιών που σκοπεύετε να χρησιμοποιήσετε για το GitHub, κρατήστε το και συνεχίστε με τον έλεγχο του παράγοντα.
ssh-add -l -E sha256
Ένα υγιές αποτέλεσμα εμφανίζει ένα ή περισσότερα δακτυλικά αποτυπώματα. Εάν το προβλεπόμενο κλειδί δεν έχει φορτωθεί, ξεκινήστε τον παράγοντα SSH όπως αρμόζει στο περιβάλλον σας και προσθέστε το ιδιωτικό κλειδί:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Φορτώστε το ιδιωτικό κλειδί στο ssh-agent, ώστε ο πελάτης SSH να μπορεί να το προσφέρει κατά τον έλεγχο ταυτότητας GitHub.
Στα Windows, η ακριβής εντολή εκκίνησης agent εξαρτάται από το αν χρησιμοποιείτε Git Bash, Windows OpenSSH, PowerShell ή άλλο περιβάλλον. Ο επίσημος οδηγός δημιουργίας κλειδιών και ssh-agent του GitHub παρέχει οδηγίες για συγκεκριμένες πλατφόρμες. Ακολουθήστε την ενότητα για τον πελάτη SSH που χρησιμοποιείτε στην πραγματικότητα. Η ανάμειξη του SSH του Git for Windows με το Windows OpenSSH είναι μια συνηθισμένη πηγή σύγχυσης.
Εάν δεν έχετε ζεύγος κλειδιών
Δημιουργήστε ένα μόνο όταν ο προηγούμενος έλεγχος δείξει ότι δεν έχετε ένα κατάλληλο κλειδί που θέλετε να χρησιμοποιήσετε. Οι τρέχουσες οδηγίες του GitHub συνιστούν το Ed25519 για ένα τυπικό κλειδί λογισμικού όταν υποστηρίζεται:
ssh-keygen -t ed25519 -C "your_email@example.com"
Χρησιμοποιήστε μια φράση πρόσβασης εάν πληροί τις απαιτήσεις ασφαλείας σας. Ο παράγοντας SSH μπορεί να αποθηκεύσει προσωρινά το ξεκλείδωτο ιδιωτικό κλειδί για την συνεδρία σας. Μην ανεβάζετε ή επικολλάτε ποτέ το ίδιο το αρχείο ιδιωτικού κλειδιού στο GitHub. Το αρχείο που τελειώνει σε .pubείναι το δημόσιο κλειδί που προορίζεται για την εγγραφή λογαριασμού.
3. Συνδέστε το αντίστοιχο δημόσιο κλειδί στον σωστό λογαριασμό GitHub
Δεν αρκεί να έχετε ένα τοπικό κλειδί. Το GitHub πρέπει να έχει το αντίστοιχο δημόσιο κλειδί που σχετίζεται με τον λογαριασμό που θα πρέπει να επαληθεύσει τον κωδικό πρόσβασης. Εμφανίστε το δημόσιο κλειδί και, στη συνέχεια, αντιγράψτε ολόκληρη τη γραμμή:
cat ~/.ssh/id_ed25519.pub
Στο GitHub, ανοίξτε τις Ρυθμίσεις , έπειτα τις Κλειδιά SSH και GPG , επιλέξτε Νέο κλειδί SSH ή Προσθήκη κλειδιού SSH , επιλέξτε ένα κλειδί ελέγχου ταυτότητας και επικολλήστε το δημόσιο κλειδί. Αυτές οι ετικέτες αντιστοιχούν στην τρέχουσα επίσημη τεκμηρίωση προσθήκης κλειδιού SSH του GitHub .
Προσθέστε το δημόσιο κλειδί—όχι το ιδιωτικό κλειδί—στον λογαριασμό GitHub που θα πρέπει να επαληθεύσει τη σύνδεση SSH.
Συγκρίνετε τα δακτυλικά αποτυπώματα όταν δεν είστε σίγουροι ποιο τοπικό κλειδί αντιστοιχεί στην καταχώρηση στο GitHub:
ssh-add -l -E sha256
Εάν το αποθετήριο ανήκει σε έναν οργανισμό που χρησιμοποιεί ενιαία σύνδεση SAML, η προσθήκη του κλειδιού στον λογαριασμό σας ενδέχεται να μην είναι αρκετή. Το GitHub τεκμηριώνει ότι ένα κλειδί SSH μπορεί επίσης να απαιτεί εξουσιοδότηση οργανισμού. Στις Ρυθμίσεις > Κλειδιά SSH και GPG , χρησιμοποιήστε την επιλογή Ρύθμιση παραμέτρων SSO για το κλειδί και εξουσιοδοτήστε τον σχετικό οργανισμό όταν είναι διαθέσιμος αυτός ο έλεγχος. Ανατρέξτε στον οδηγό εξουσιοδότησης SSO κλειδιού SSH του GitHub .
4. Δοκιμάστε τον έλεγχο ταυτότητας ανεξάρτητα από το Git
Μην το χρησιμοποιείτε git pushως τη μόνη σας δοκιμή. Δοκιμάστε απευθείας το SSH:
ssh -T git@github.com
Μια επιτυχημένη δοκιμή SSH αναγνωρίζει τον έλεγχο ταυτότητας του λογαριασμού GitHub και επιβεβαιώνει ότι η ανταλλαγή κλειδιών λειτουργεί.
Το μήνυμα επιτυχίας θα πρέπει να υποδέχεται το όνομα χρήστη σας στο GitHub και να εξηγεί ότι το GitHub δεν παρέχει πρόσβαση στο κέλυφος. Το GitHub σημειώνει επίσης ότι αυτή η δοκιμή μπορεί να τερματιστεί με κωδικό κατάστασης 1 ακόμα και όταν ο έλεγχος ταυτότητας είναι επιτυχής, επομένως κρίνετε το από το μήνυμα ελέγχου ταυτότητας αντί να περιμένετε ένα κανονικό διαδραστικό κέλυφος.
Εάν η δοκιμή εξακολουθεί να τελειώνει σε Permission denied (publickey), εκτελέστε τη λειτουργία λεπτομερούς περιγραφής:
ssh -vT git@github.com
Αναζητήστε γραμμές όπως Offering public key. Εάν το αρχείο καταγραφής δεν προσφέρει ποτέ το κλειδί που περιμένατε, το πρόβλημα είναι η επιλογή τοπικού κλειδιού ή η διαμόρφωση του παράγοντα. Εάν το προβλεπόμενο κλειδί προσφέρεται αλλά απορρίπτεται, ελέγξτε εάν αυτό το δημόσιο κλειδί είναι συνδεδεμένο στον σωστό λογαριασμό GitHub και εάν απαιτείται εξουσιοδότηση SSO.
Πολλαπλοί λογαριασμοί GitHub: επαληθεύστε ποια ταυτότητα χρησιμοποιείται στην πραγματικότητα
Εάν χρησιμοποιείτε επαγγελματικούς και προσωπικούς λογαριασμούς στον ίδιο υπολογιστή, ο επιτυχής έλεγχος ταυτότητας SSH μπορεί να καταλήξει σε λάθος λογαριασμό. Το GitHub καταγράφει χρησιμοποιώντας IdentitiesOnly=yesένα συγκεκριμένο αρχείο ταυτότητας για να ελέγχει ποιο κλειδί προσφέρει το SSH. Για μια εφάπαξ διάγνωση:
Εάν το GitHub χαιρετήσει λάθος όνομα χρήστη, έχετε βρει την αναντιστοιχία. Διαμορφώστε ξεχωριστά κλειδιά ή ψευδώνυμα κεντρικού υπολογιστή αντί να διαγράφετε και να προσθέτετε ξανά κλειδιά επανειλημμένα. Ο επίσημος οδηγός πολλαπλών λογαριασμών του GitHub καλύπτει αυτήν την περίπτωση με περισσότερες λεπτομέρειες.
5. Δοκιμάστε ξανά την εντολή αποθετηρίου και, στη συνέχεια, αλλάξτε την προσέγγιση μόνο εάν τα στοιχεία δείχνουν αλλού.
Μόλις ssh -T git@github.comεπαληθευτεί ο αναμενόμενος χρήστης, δοκιμάστε ξανά την πραγματική λειτουργία του αποθετηρίου:
git fetch origin
git pull
git push
Ο τελικός έλεγχος ποιότητας είναι η πραγματική λειτουργία Git: η επιτυχής πιστοποίηση θα πρέπει να μεταφράζεται σε επιτυχή πρόσβαση στο αποθετήριο όταν ο λογαριασμός έχει άδεια.
Εάν ο έλεγχος ταυτότητας SSH είναι επιτυχής, αλλά το Git αναφέρει τώρα ένα σφάλμα δικαιωμάτων που αφορά συγκεκριμένα το αποθετήριο, διακόψτε την αλλαγή του κλειδιού SSH. Σε αυτό το σημείο, το κλειδί έχει ήδη κάνει τη δουλειά του. Επαληθεύστε ότι ο λογαριασμός που έχει υποβληθεί σε έλεγχο ταυτότητας έχει πρόσβαση στο αποθετήριο, ότι ο κάτοχος και το όνομα του αποθετηρίου στην απομακρυσμένη διεύθυνση URL είναι σωστά και ότι ένας οργανισμός έχει εκχωρήσει τον απαιτούμενο ρόλο. Η ξεχωριστή σελίδα αντιμετώπισης προβλημάτων δικαιωμάτων αποθετηρίου του GitHub εξηγεί την περίπτωση όπου το κλειδί ανήκει σε έναν λογαριασμό χωρίς πρόσβαση.
Εάν η θύρα 22 είναι μπλοκαρισμένη
Ένα τείχος προστασίας ή ένας διακομιστής μεσολάβησης μπορεί να αποτρέψει μια έγκυρη ρύθμιση SSH από το να φτάσει στο GitHub στη θύρα 22. Ελέγξτε το τεκμηριωμένο τελικό σημείο SSH-over-HTTPS του GitHub:
ssh -T -p 443 git@ssh.github.com
Το όνομα κεντρικού υπολογιστή είναι ssh.github.com, όχι github.com, για αυτήν την άμεση δοκιμή θύρας-443. Εάν λειτουργεί, το GitHub τεκμηριώνει αυτήν τη διαμόρφωση SSH:
Host github.com
Hostname ssh.github.com
Port 443
User git
Στη συνέχεια, δοκιμάστε ξανά με . Ανατρέξτε στον οδηγό SSH μέσω θύρας 443ssh -T git@github.com του GitHub . Αυτή η λύση δεν ισχύει για κάθε περιβάλλον GitHub Enterprise και οι διακομιστές proxy μπορούν να επηρεάσουν την κατάσταση.
Πώς να ξέρετε πότε να σταματήσετε να δοκιμάζετε την ίδια λύση
Τι παρατηρείτε
Τι σημαίνει
Επόμενη κίνηση
ssh-add -lδεν δείχνει κανένα προβλεπόμενο κλειδί
Ο πελάτης δεν μπορεί να προσφέρει το σωστό ιδιωτικό κλειδί
Διόρθωση της διαδρομής του παράγοντα ή του κλειδιού
Το λεπτομερές SSH δεν εμφανίζεται ποτέ Offering public keyγια το κλειδί που θέλετε να χρησιμοποιήσετε
Η επιλογή SSH είναι λανθασμένη
Χρησιμοποιήστε -i, IdentitiesOnly=yes, ή διορθώστε~/.ssh/config
Το προβλεπόμενο κλειδί προσφέρεται αλλά απορρίπτεται
Το GitHub δεν δέχεται αυτό το κλειδί για την επιχειρούμενη ταυτότητα
Ελέγξτε το δημόσιο κλειδί που έχει μεταφορτωθεί, τον λογαριασμό-στόχο και την εξουσιοδότηση SSO
Το SSH χαιρετά το λάθος όνομα χρήστη GitHub
Χρησιμοποιείται το κλειδί ενός διαφορετικού λογαριασμού
Ξεχωρίστε τα κλειδιά λογαριασμού και επιλέξτε ρητά την προβλεπόμενη ταυτότητα
Το SSH επιτυγχάνει, αλλά το αποθετήριο απορρίπτει την ώθηση ή την ανάκτηση
Ο έλεγχος ταυτότητας λειτουργεί. Το πρόβλημα είναι πλέον η εξουσιοδότηση ή η διεύθυνση URL του αποθετηρίου.
Ελέγξτε την πρόσβαση στο αποθετήριο και την απομακρυσμένη ιδιοκτησία
Η θύρα 22 δεν μπορεί να συνδεθεί καθόλου
Το δίκτυο ενδέχεται να μπλοκάρει το τυπικό SSH
Δοκιμάστε τη θύρα 443 ή χρησιμοποιήστε HTTPS
Συνήθεις διορθώσεις που συχνά σπαταλούν χρόνο
Δημιουργία κλειδιού μετά από κλειδί χωρίς έλεγχο των προσφορών του SSH. Περισσότερα κλειδιά μπορούν να κάνουν την επιλογή πιο δύσκολη. Χρησιμοποιήστε πρώτα ssh -vTτο και ssh-add -l -E sha256.
Χρήση του ονόματος χρήστη GitHub πριν από το @github.com. Το τελικό σημείο SSH του GitHub αναμένει τον χρήστη SSH git. Η ταυτότητά σας στο GitHub καθορίζεται από το δημόσιο κλειδί που αναγνωρίζει το GitHub.
Μεταφόρτωση του ιδιωτικού κλειδιού. Μην το κάνετε αυτό. Το GitHub χρειάζεται τη δημόσια .pubτιμή. Το ιδιωτικό κλειδί παραμένει στον υπολογιστή σας ή στον εγκεκριμένο χώρο αποθήκευσης κλειδιών.
Υποθέτοντας ότι μια δοκιμή SSH είναι επιτυχής, εγγυάται την πρόσβαση push. Αποδεικνύει τον έλεγχο ταυτότητας λογαριασμού. Η εξουσιοδότηση αποθετηρίου αποτελεί ξεχωριστό έλεγχο.
Αγνοώντας το SSO. Οι οργανωτικοί πόροι ενδέχεται να απαιτούν πρόσθετη εξουσιοδότηση κλειδιού SSH, ακόμη και όταν το κλειδί υπάρχει στον προσωπικό σας λογαριασμό.
Χρήση εντολών Git με αναβαθμισμένα δικαιώματα. Η εκτέλεση του Git ως άλλου χρήστη του λειτουργικού συστήματος μπορεί να αλλάξει τον αρχικό κατάλογο, τη διαμόρφωση SSH, τον παράγοντα και τα κλειδιά που χρησιμοποιούνται.
Όταν το HTTPS είναι η καλύτερη απάντηση
Το SSH δεν είναι υποχρεωτικό. Το GitHub υποστηρίζει επίσης απομακρυσμένα HTTPS. Εάν ένα κλειδωμένο εταιρικό δίκτυο, μια πολιτική διαχειριζόμενου τελικού σημείου ή ένας διακομιστής μεσολάβησης καθιστούν το SSH μη πρακτικό, η αλλαγή του απομακρυσμένου αποθετηρίου σε HTTPS μπορεί να είναι απλούστερη από την καταπολέμηση του δικτύου. Αυτή είναι μια αλλαγή μεθόδου ελέγχου ταυτότητας, όχι μια επιδιόρθωση της διαμόρφωσης SSH, επομένως χρησιμοποιήστε το όταν το περιβάλλον σας καθιστά το SSH ανεπιθύμητο και όχι ως τρόπο απόκρυψης μιας ανεπίλυτης αναντιστοιχίας κλειδιών.
Για το SSH, το πιο αξιόπιστο σημείο τερματισμού βασίζεται σε στοιχεία: το αναμενόμενο κλειδί φορτώνεται, το GitHub το αναγνωρίζει ως τον αναμενόμενο λογαριασμό, ο οργανισμός το εξουσιοδοτεί όταν απαιτείται και η πραγματική λειτουργία Git είναι επιτυχής. Εάν ένας από αυτούς τους ελέγχους αποτύχει, αλλάξτε μόνο το επίπεδο που απέτυχε. Αυτό διατηρεί τη διαδικασία αντιμετώπισης προβλημάτων υπό έλεγχο και αποφεύγει την άσκοπη αντικατάσταση των λειτουργικών κλειδιών.