J'ai essayé de chercher des réponses aux questions précédentes dans les questions précédentes, mais toutes les réponses suggérées précédemment n'ont pas fonctionné pour moi.
J'essaie de me connecter à un linode (exécutant ubuntu 12.04 LTS) à partir de ma machine locale (exécutant également ubnutu 12.04 LTS)
J'ai créé une clé privée et publique sur mon ordinateur local et copié ma clé publique dans le fichier allowed_keys de mon linode. Cependant, chaque fois que j'essaie de ssh sur mon linode, je reçois le message d'erreur "Autorisation refusée (publickey).
Ce n'est pas un problème avec la façon dont ssh est configuré sur mon linode car je peux le faire depuis ma machine Windows en utilisant l'authentification par clé.
Dans mon répertoire .ssh sur ma machine ubuntu locale, j'ai mes fichiers id_rsa et id_rsa.pub. Dois-je créer un fichier allowed_keys sur ma machine locale?
EDIT: C’est ce que j’obtiens lorsque j’exécute ssh -vvv -i id_rsa [youruser] @ [yourLinode]
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).
ssh-keygen
vim ~/.ssh/config
ssh-copy-id -i /path/to/key.pub SERVERNAME
Votre fichier de configuration de étape 2 devrait avoir quelque chose de similaire au suivant:
Host SERVERNAME
Hostname ip-or-domain-of-server
User USERNAME
PubKeyAuthentication yes
IdentityFile ./path/to/key
Vous pouvez ajouter IdentitiesOnly yes
pour vous assurer que ssh
utilise le IdentityFile
et aucun autre fichier de clé lors de l'authentification, ce qui peut entraîner des problèmes et n'est pas une bonne pratique.
tail -f /var/log/auth.log
(sur le serveur) et surveillez les erreurs lorsque vous essayez de vous connecterIdentitiesOnly yes
pour limiter l'authentification à l'utilisation de la clé unique spécifiée.Parfois, le problème provient des autorisations et de la propriété. Par exemple, si vous souhaitez vous connecter en tant que root, /root
, .ssh
et authorized_keys
doivent appartenir à root. Sinon, sshd ne pourra pas les lire et ne pourra donc pas dire si l'utilisateur est autorisé à se connecter.
Dans votre répertoire personnel:
chown -R your_user:your_user .ssh
En ce qui concerne les droits, allez avec 700 pour .ssh
et 600 pour authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
Vous n'avez pas besoin de authorized_keys
sur votre client.
Vous devez dire au client ssh d'utiliser réellement la clé que vous avez générée. Il y a plusieurs façons de le faire. Juste pour tester le type ssh -vvv -i .ssh/id_rsa [youruser]@[yourLinode]
. Vous devrez fournir votre phrase secrète chaque fois que vous souhaitez vous connecter au serveur.
Si cela fonctionne, vous pouvez ajouter la clé au ssh-agent
avec ssh-add .ssh/id_rsa
(vous devrez fournir la phrase secrète une seule fois pour cela et cela devrait fonctionner tant que vous ne vous déconnectez pas/ne redémarrez pas.)
Vérifiez également la valeur de PasswordAuthentication
dans /etc/ssh/sshd_config
et si c'est no
name__, remplacez-la par yes
name__. N'oubliez pas de redémarrer le service ssh après cela.
Assurez-vous également que le répertoire de base de l'utilisateur (sur le serveur) appartient bien à l'utilisateur ssh'ing into (a été défini sur root: root dans mon cas).
Aurait du être:
Sudo chown username:username /home/username;
Le problème que j'ai eu était qu'il utilisait les mauvaises clés sur le client. J'avais renommé id_rsa et id_rsa.pub en quelque chose d'autre. Vous pouvez les renommer à nouveau par défaut ou les utiliser comme ceci lorsque vous exécutez la commande ssh.
ssh -i ~/.ssh/private_key username@Host
J'ai récemment rencontré ce problème avec mon serveur Web.
Je conserve généralement une liste de clés autorisées sur tous mes serveurs dans ~/.ssh/authorized_keys2
. D'après mon expérience, sshd
cherchera ~/.ssh/authorized_keys
ou ~/.ssh/authorized_keys2
par défaut.
Dans le cas de mon serveur Web, le /etc/ssh/sshd_config
avait cette ligne
AuthorizedKeysFile %h/.ssh/authorized_keys
au lieu de
AuthorizedKeysFile %h/.ssh/authorized_keys2
J'ai appliqué ce dernier, redémarré mon démon ssh et résolu mon problème de connexion avec ssh à l'aide de ma clé publique.
Une autre cause possible pourrait être la configuration AllowedUsers
dans /etc/ssh/sshd_conf
. NOTE: la liste est espace délimitée (non délimitée par des virgules) comme j'ai appris à la dure.
AllowUsers user1 user2 user3
C’est ce qui a fonctionné pour moi, la solution ne m’appartient pas, mais je préférerais la noter ici au cas où une autre personne aurait le même problème.
L'auteur d'origine l'a posté ici: digital-ocean-public-access-key-denied
Sudo nano /etc/ssh/sshd_config
Remplacez ceci
UsePAM yes
IgnoreUserKnownHosts no
PasswordAuthentication no
Avec ça
UsePAM no
IgnoreUserKnownHosts no
PasswordAuthentication yes
Enregistrez le fichier et redémarrez ssh
reload ssh
ssh devrait fonctionner maintenant en demandant un mot de passe
Fonctionne également sur Ubuntu 16.04.
Le problème se trouve dans le fichier sshd_config
Voici la solution ULTIMATE:
Connectez-vous en tant que root sur votre serveur Ubuntu
vi /etc/ssh/sshd_config
Allez maintenant tout en bas et changez la valeur de "non" à "oui".
Ça devrait ressembler à ça:
Passez à non pour désactiver les mots de passe en clair en tunnel
PasswordAuthentication yes
service sshd reload
prendre effet.
Maintenant, vous pouvez simplement une clé en utilisant la commande suivante de votre machine locale (aka ordinateur portable, etc.)
Donc, ouvrez une nouvelle fenêtre de terminal et ne vous connectez PAS au serveur, entrez simplement cette commande:
ssh-copy-id john @ serverIPAddress
(Remplacez john par votre nom d'utilisateur).
vous devriez être aller aller
J'ai eu le même problème lors de la copie de la clé publique d'un utilisateur normal (par exemple, JohnDoe) d'un système cPanel Centos sur un serveur Ubuntu sur AWS. Comme suggéré par gertvdijk ci-dessus, j'ai vérifié /var/log/auth.log
et bien sûr, il a dit Authentication refused: bad ownership or modes for directory /home/johndoe
. Il s'est avéré que je n'avais pas correctement codé /home/johndoe
lors de la définition de /home/johndoe/public_html
en tant que racine du document virtualhost par défaut pour Apache2 (cela n'est pas nécessaire non plus pour cette tâche).
Voir aussi les réponses ici et ici
Le serveur doit uniquement disposer de la clé publique dans .ssh/authorized_keys
et le client (ordinateur sur lequel vous travaillez) doit disposer de la clé privée (.pem ou, si vous utilisez SFTP avec Filezilla, .ppk)
Je mon cas, le client est Ubuntu 14.04lts, le serveur a été gagnant 2012 serveur exécutant Cygwin. J'utilisais 'ssh [email protected]', lorsque le répertoire du serveur 2012 dans cygwin était/home/Administrator. C'était donc sensible à la casse, quand j'ai essayé 'ssh [email protected]' (notez le majuscule A sur Administrateur), puis cela a bien fonctionné.
Un message d'erreur du type "utilisateur non trouvé" m'aurait conduit à la solution beaucoup plus rapidement que "autorisation refusée (publickey, clavier interactif)".
Pour les utilisateurs de PuTTY comme moi qui ont consulté ce fil de discussion, vous risquez également d'obtenir cette erreur si vous avez oublié d'ajouter l'utilisateur utilisateur @ Ip!
D'autres étant la permission sur le fichier clé chmod à 600)
ssh 1.1.1.1 -i /path/to/.pem file
Permission denied (publickey).`
ssh [email protected] -i /path/to/.pem file
J'ai eu le même problème que décrit dans la question. Le résultat de l'exécution de ssh -vvv -i id_rsa [youruser]@[yourLinode]
sur l'ordinateur client était similaire à celui décrit dans la question. J'ai vérifié toutes les autorisations de fichiers et de répertoires comme indiqué dans les autres réponses, et elles étaient correctes.
Il s'est avéré que lors de la copie du fichier généré id_rsa.pub
sur la machine serveur, sous le fichier ~username/.ssh/authorized_keys
, j'avais accidentellement omis le mot ssh-rsa
dès le début. L'ajouter a résolu le problème.
Si tout échoue, vérifiez que votre utilisateur de connexion appartient au groupe Allowed de ssh. En d’autres termes, vos utilisateurs sont membres du groupe indiqué à la ligne suivante dans /etc/ssh/sshd_config
sur le serveur:
AllowGroups ssh #Here only users of 'ssh' group can login
Certaines personnes qui se demandent ont peut-être configuré l'accès ssh de manière à ce qu'il ne soit la clé que sur le compte root, puis a créé un nouvel utilisateur et ne s'est pas rendu compte qu'il en fallait
ssh root@your-ip-address
rsync --archive --chown=[user]:[user] ~/.ssh /home/[user]
logout
name__
Puis réessaye. Remplacez [utilisateur] par votre nouveau compte utilisateur.
Ceci est courant lorsque vous configurez un nouveau serveur sur DigitalOcean lorsque vous avez utilisé les touches ssh lors de la configuration.
https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04
Dans mon cas, le problème était dû à la copie d’un répertoire .ssh
à partir d’une machine plus ancienne. Il s'avère que mon ancienne configuration SSH utilisait des clés DSA qui ont depuis été obsolète . Le passage à une nouvelle paire de clés, cette fois basée sur RSA, a résolu le problème pour moi.
La méthode suivante peut fonctionner si vous pouvez accéder à machineA et à machineB indépendamment (par exemple à partir de machineC).
Si ssh-copy-id ne fonctionne pas, l'authentification par mot de passe peut être désactivée. Ce qui suit est une solution de contournement.
Avoir la clé publique de machineA dans les clés autorisées de machineB (c'est-à-dire ~/.ssh/allowed_keys) vous permettra de passer en SSH à partir de machineA. Cela vaut également pour scp.
Après avoir généré les paires de clés à l’aide de: ssh-keygen
Sur machineA, exécutez cat ~/.ssh/id_rsa.pub
Exemple de sortie:
ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA
Copiez la clé imprimée (⌘ Command+C, ou CRTL+C) puis ajoutez-le au fichier ~/.ssh/registered_keys sur machineB.
Par exemple, exécutez ce qui suit sur machineB:
echo 'ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA' >> ~/.ssh/authorized_keys