web-dev-qa-db-fra.com

Ajouter une clé publique à ~/.ssh/registered_keys ne me connecte pas automatiquement

J'ai ajouté la clé publique ssh au fichier authorised_keys. ssh localhost devrait me connecter sans demander le mot de passe. 

J'ai fait cela et essayé de taper ssh localhost, mais il me demande quand même de taper le mot de passe. Dois-je passer par un autre paramètre pour que cela fonctionne?

J'ai suivi les instructions pour modifier les autorisations:

Ci-dessous le résultat si je fais ssh -v localhost

debug1: Reading configuration data /home/john/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/john/.ssh/identity type 1
debug1: identity file /home/john/.ssh/id_rsa type -1
debug1: identity file /home/john/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.7p1 Debian-8ubuntu3
debug1: match: OpenSSH_4.7p1 Debian-8ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'localhost' is known and matches the RSA Host key.
debug1: Found key in /home/john/.ssh/known_hosts:12
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/john/.ssh/identity
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>

Ensuite, il demande le mot de passe après le journal ci-dessus. Pourquoi ne me connecte-t-il pas sans mot de passe?

378
user482594

Vous devez vérifier les autorisations du fichier authorized_keys et du dossier/dossiers parent dans lequel il se trouve.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Pour plus d'informations, voir cette page .

Vous devrez peut-être également modifier/vérifier les autorisations de votre répertoire de base pour supprimer l'accès en écriture du groupe et des autres.

chmod go-w ~
953
Teddy

SELinux peut aussi faire en sorte que allowed_keys ne fonctionne pas. Surtout pour root dans CentOS 6 et 7. Pas besoin de le désactiver cependant. Une fois que vous avez vérifié que vos autorisations sont correctes, vous pouvez résoudre ce problème comme suit:

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
restorecon -R -v /root/.ssh
137
Cole Stanfield

la définition de ssh allowed_keys semble être simple mais cache quelques pièges que je tente de comprendre

- SERVEUR -

dans / etc/ssh/sshd_config, définissez passwordAuthentication yes pour permettre au serveur d'accepter temporairement l'authentification par mot de passe

-- CLIENT -- 

considérez cygwin comme émulation linux et installez & exécutez openssh

1. générer des clés privées et publiques (côté client) # ssh-keygen

en appuyant simplement sur ENTRÉE, vous obtenez D&EACUTE;FAUT 2 fichiers "id_rsa" et "id_rsa.pub" dans ~/.ssh/ mais si vous donnez un name_for_the_key, les fichiers générés sont sauvegardés dans votre pwd 

2. place le your_key.pub sur la machine cible ssh-copy-id user_name@Host_name

si vous n'avez pas créé de clé par défaut, c'est la première étape pour vous tromper. Vous devez utiliser

ssh-copy-id -i path/to/key_name.pub user_name@Host_name

3. logging ssh user_name@Host_name ne fonctionnera que pour id_rsa par défaut, donc voici le deuxième piège pour vous devez ssh -i path/to/key_name user@Host

(utilisez l'option ssh -v ... pour voir ce qui se passe)

Si server demande toujours le mot de passe, alors vous lui avez donné. to Enter passphrase: lorsque vous avez créé des clés (donc c'est normal) 

si ssh n'écoute pas, le port par défaut 22 doit utiliser ssh -p port_nr 

- SERVEUR -----

4. modifier / etc/ssh/sshd_config pour avoir

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  %h/.ssh/authorized_keys

(pas de commentaire si c'est le cas)

Cela indique à ssh d’accepter les authorised_keys et de rechercher dans le répertoire de base de l’utilisateur la séquence key_name écrite dans le fichier .ssh/allowed_keys.

5 définir les autorisations sur la machine cible

chmod 755 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Éteignez également les autorisations de passage 

passwordAuthentication no 

fermer la porte à toutes les tentatives ssh root/admin /....@ your_domain

6 s'assurent que la propriété et la propriété de groupe de tous les répertoires de départ non root sont appropriées.

chown -R ~ usernamehere
chgrp -R ~/.ssh/ user 

=============================================

7. considère l'excellent http://www.fail2ban.org

8. extra ssh TUNNEL pour accéder à un serveur MySQL (bind = 127.0.0.1)

90
bortunac

Assurez-vous également que votre répertoire personnel n'est pas accessible en écriture.

chmod g-w,o-w /home/USERNAME

La réponse est volée de ici

34
Stephan Hoyer

les désespérés peuvent également s’assurer qu’ils ne disposent pas de saut de ligne supplémentaire dans le fichier allowed_keys car ils copient du texte id_rsa.pub à partir d’un terminal confus.

9
Alexander Taylor

La liste d'une clé publique dans .ssh/allowed_keys est nécessaire mais pas suffisante pour que sshd (serveur) l'accepte. Si votre clé privée est protégée par une phrase secrète, vous devez donner la phrase secrète à ssh (client) à chaque fois. Ou vous pouvez utiliser ssh-agent, ou un équivalent de gnome.

Votre trace UPDATE est compatible avec une clé privée protégée par une phrase secrète. Voir ssh-agent ou ssh-keygen -p.

7
fche

Attention, SELinux peut également provoquer cette erreur, même si toutes les autorisations semblent correctes. La désactiver a fait l'affaire pour moi (insérer les clauses de non-responsabilité habituelles concernant sa désactivation).

7
Nim

utilisateur est votre nom d'utilisateur

mkdir -p /home/user/.ssh
ssh-keygen -t rsa
touch /home/user/.ssh/authorized_keys
touch /home/user/.ssh/known_hosts
chown -R user:user /home/user/.ssh
chmod 700 /home/user/.ssh
chmod 600 /home/user/.ssh/id*
chmod 644 /home/user/.ssh/id*.pub
chmod 644 /home/user/.ssh/authorized_keys
chmod 644 /home/user/.ssh/known_hosts
5
wcc526

La chose qui a fait le tour pour moi a finalement été de m'assurer que le propriétaire/groupe ne soit pas root mais utilisateur:

chown -R ~/.ssh/ user
chgrp -R ~/.ssh/ user 
4
Ulrich Behrendt

Dans mon cas, je devais mettre mon fichier authorized_keys dans .openssh

Cet emplacement est spécifié dans /etc/ssh/sshd_config sous l'option AuthorizedKeysFile %h/.ssh/authorized_keys.

3
Sean Bannister

Commande d'écriture:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Après cela, assurez-vous que votre répertoire est comme ça:

drwx------ 2 lab lab 4.0K Mar 13 08:33 .
drwx------ 8 lab lab 4.0K Mar 13 08:07 ..
-rw------- 1 lab lab  436 Mar 13 08:33 authorized_keys
-rw------- 1 lab lab 1.7K Mar 13 07:35 id_rsa
-rw-r--r-- 1 lab lab  413 Mar 13 07:35 id_rsa.pub
3
Exsonic

Un autre conseil à retenir. Depuis la version 7.0, OpenSSH désactive DSS/DSA les clés SSH par défaut en raison de leur faiblesse héritée. Donc, si vous avez OpenSSH v7.0 +, assurez-vous que votre clé n'est pas ssh-dss.

Si vous êtes bloqué avec des clés DSA, vous pouvez réactiver la prise en charge localement par mettre à jour vos fichiers sshd_config et ~/.ssh/config avec des lignes comme celle-ci: PubkeyAcceptedKeyTypes=+ssh-dss

3
user2683246

Essayez "ssh-add" qui a fonctionné pour moi.

3
h99

Un autre problème que vous devez prendre en charge. Si votre fichier généré n'est pas le fichier par défaut id_rsa et id_rsa.pub

Vous devez créer un fichier .ssh/config et définir manuellement le fichier ID que vous allez utiliser avec la connexion.

Exemple est ici:

Host remote_Host_name
hostname 172.xx.xx.xx
user my_user
IdentityFile /home/my_user/.ssh/my_user_custom.pub
2
Kunthar

Assurez-vous que l'utilisateur cible a un mot de passe défini. Exécutez passwd username pour en définir un. Cela était nécessaire pour moi même si la connexion par mot de passe SSH était désactivée.

2
George

Assurez-vous que vous avez copié la clé publique entière dans authorized_keys; le préfixe ssh rsa est nécessaire pour que la clé fonctionne.

1
Willem

vous devez vérifier les propriétés des fichiers . pour affecter la propriété requise, utilisez:

$ chmod 600 ~/.ssh/sshKey
$ chmod 644 ~/.ssh/sshKey.pub
1
Manna

cela résout mon problème

ssh-agent bash

ssh-add

1
Julian

Cela ressemble à un problème de permission. Cela se produit généralement si l’autorisation d’un fichier/répertoire n’est pas correctement configurée. Dans la plupart des cas, il s'agit de ~/.ssh et ~/.ssh/*. Dans mon cas, ils sont /home/xxx.

Vous pouvez changer le niveau de journalisation de sshd en modifiant /etc/ssh/sshd_config (recherche LogLevel, réglez-le sur DEBUG), puis vérifiez le résultat dans /var/log/auth.log pour voir ce qui s'est passé exactement.

1
Joey

J'ai émis Sudo chmod 700 ~/.ssh et chmod 600 ~/.ssh/authorized_keys et chmod go-w $HOME $HOME/.ssh par le haut et cela a résolu mon problème sur une boîte CentOS7 dont j'avais dérangé les autorisations lors de la tentative de fonctionnement des partages samba. Merci

1
GJSmith3rd

Il suffit de regarder sur /var/log/auth.log sur le serveur . Définir une verbosité supplémentaire avec -vv du côté client ne vous aidera pas, car il est peu probable que le serveur offre trop d'informations à un attaquant possible. 

0
Edward van Kuik

sur cette note, assurez-vous que sshd config a -;

PermitRootLogin without-password

définir comme ci-dessus, puis redémarrer sshd (/etc/init.d/sshd restart)

déconnectez-vous et essayez à nouveau de vous connecter!

défaut je crois est -;

PermitRootLogin no
0
Edd Stance

Regardez /var/log/auth.log sur le serveur pour les erreurs sshd auth.

Si tout échoue, exécutez le serveur sshd en mode débogage:

Sudo /usr/sbin/sshd -ddd -p 2200

Puis connectez-vous à partir du client:

ssh user@Host -p 2200

Dans mon cas, j'ai trouvé la section d'erreur à la fin:

    debug1: userauth_pubkey: test whether pkalg/pkblob are acceptable for RSA SHA256:6bL+waAtghY5BOaY9i+pIX9wHJHvY4r/mOh2YaL9RvQ [preauth]
==> debug2: userauth_pubkey: disabled because of invalid user [preauth]
    debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa [preauth]
    debug3: userauth_finish: failure partial=0 next methods="publickey,password" [preauth]
    debug3: send packet: type 51 [preauth]
    debug3: receive packet: type 50 [preauth]

Avec cette information, j'ai réalisé que mon sshd_config limitait les connexions aux membres du groupe ssh. La commande suivante a corrigé cette erreur d'autorisation:

Sudo usermod -a -G ssh NEW_USER
0
cmcginty

J'ai eu ce problème et aucune des autres réponses ne l'a résolu, bien que bien sûr les autres réponses soient correctes.

Dans mon cas, il s'est avéré que le répertoire /root lui-même (et non par exemple /root/.ssh) avait les autorisations incorrectes. J'ai eu besoin:

chown root.root /root
chmod 700 /root

Bien sûr, ces autorisations devraient être quelque chose comme ça (peut-être chmod 770) indépendamment. Cependant, cela empêchait spécifiquement sshd de fonctionner, même si /root/.ssh et /root/.ssh/authorized_keys avaient les autorisations et les propriétaires appropriés.

0
Jason Cohen

J'ai eu ce problème lorsque j'ai ajouté le groupe de l'utilisateur de connexion à un autre utilisateur. Supposons qu'il existe un utilisateur ssh-login appelé userA et un utilisateur non-ssh-login userB. userA a également le groupe userA. J'ai modifié userB pour avoir le groupe userA également. Le comportement au comportement décrit, de sorte que l'utilisateur A n'a pas pu se connecter sans invite. Après avoir supprimé le groupe userA de userB, la connexion sans invite a de nouveau fonctionné.

0
Bevor

Mon problème était un AuthorizedKeysFile modifié, alors que l'automatisation de peuplement de/etc/ssh/allowed_keys n'avait pas encore été exécutée.

$Sudo grep AuthorizedKeysFile /etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysFile  /etc/ssh/authorized_keys/%u
0
Mark

Dans mon cas, c'est parce que le groupe de l'utilisateur n'est pas défini dans AllowGroups du fichier de configuration/etc/ssh/sshd_config. Après l'ajout, tout fonctionne bien. 

0
pppk520