web-dev-qa-db-fra.com

Autorisation SSH refusée (publickey)

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).
100
Pattle

PubKeyAuthentication

Configurez votre client

  1. Générez votre clé
    • ssh-keygen
  2. Configurez ssh pour utiliser la clé
    • vim ~/.ssh/config
  3. Copiez votre clé sur votre serveur
    • 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.

Dépannage

  1. utilisez l'option "-vvv"
  2. Assurez-vous que le serveur dispose de votre clé PUBLIC (.pub).
  3. Assurez-vous que votre IdentiyFile pointe sur votre clé privée.
  4. Assurez-vous que votre répertoire .ssh contient 700 personnes et que vos fichiers disposent de 700 autorisations (rwx ------).
  5. tail -f /var/log/auth.log (sur le serveur) et surveillez les erreurs lorsque vous essayez de vous connecter
  6. Si vous avez plusieurs fichiers de clé, essayez IdentitiesOnly yes pour limiter l'authentification à l'utilisation de la clé unique spécifiée.
85
earthmeLon

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
55
Buzut

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.)

14
guntbert

Vérifiez également la valeur de PasswordAuthenticationdans /etc/ssh/sshd_config et si c'est noname__, remplacez-la par yesname__. N'oubliez pas de redémarrer le service ssh après cela.

10
iman

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;
7
canoodle

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
6
Todd

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.

3
Justin C

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
2
cmbind55

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

1
mau

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

1
Galapagos

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)

1
site80443

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)".

1
Kent

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 
1
Alex Punnen

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.

1
Teemu Leisti

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
1
biocyberman

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]

logoutname__

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

0
LpLrich

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.

0
Glutanimate

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

0
anask