web-dev-qa-db-fra.com

Le serveur OpenSSH refuse d'accepter l'authentification par clé

J'ai essayé d'utiliser l'authentification par clé publique sur mon nouveau serveur et j'ai rencontré ce problème.

$ ssh -v -i .ssh/server 192.168.1.100
OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data .ssh/config
debug1: Applying options for *
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug1: Connecting to 192.168.1.100 [192.168.1.100] port 22.
debug1: Connection established.
debug1: identity file .ssh/server type -1
debug1: identity file .ssh/server-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.8p1 Debian-1ubuntu3
debug1: match: OpenSSH_5.8p1 Debian-1ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.6
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr 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 '192.168.1.100' is known and matches the RSA Host key.
debug1: Found key in .ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
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: Trying private key: .ssh/server
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: password

et puis je dois entrer mon mot de passe pour me connecter.

Toutefois, si une session est déjà connectée à ce serveur (qui est connecté par mot de passe), la connexion suivante utilise la clé auth pour éviter la saisie d'un mot de passe.

Si aucune connexion SSH n'est déjà établie, je ne peux pas me connecter sans mot de passe.

C'est vraiment bizarre pour moi, j'ai vérifié le MD5 de /usr/sbin/sshd entre le nouveau serveur et l'autre serveur normal, c'est la même chose. Ensuite, je viens de copier le /etc/ssh/sshd_config de l'autre serveur normal vers le nouveau serveur et d'exécuter service ssh restart. Le problème existe toujours.

Comment suis-je supposé résoudre ce problème?

13
lxyu

Vérifiez que votre dossier .ssh et les fichiers qu'il contient sur la machine cliente ne sont lisibles que par le propriétaire (chmod -R 600 .ssh) et que le propriétaire est correct pour le dossier et les fichiers (utilisez la commande chown si nécessaire).

Vérifiez également le dossier et le fichier authorized_keys sur le serveur (probablement dans /root/.ssh ou dans le dossier de base de l'utilisateur qui tente de se connecter) pour vous assurer que leurs autorisations et leur propriétaire sont définis de la même manière.


Edit: basé sur plus de commentaires (et quelques approximations!) - pouvez-vous vérifier /etc/ssh/sshd_config et voir si le paramètre suivant est défini comme ci-dessous. Sinon, essayez de le modifier.

AuthorizedKeysFile /home/%u/.ssh/authorized_keys

Notez que cela suppose que vous ne vous connectez pas à distance en tant que root.

10
Linker3000

J'ai corrigé moi-même cette erreur en supprimant id_rsa.pub de .ssh.

J'avais copié id_rsa à partir d'une autre machine et l'avais distribué sur plusieurs clients factices. Par conséquent, id_rsa et id_rsa.pub étaient en réalité des clés différentes qui empêchaient l'utilisation de id_rsa.

Aucun message d'erreur ne l'indique clairement. Je l'ai compris essentiellement par accident, en essayant de mettre les différentes machines dans un état identique.

4
ketarax

Dans mon cas, les autorisations sur le répertoire personnel étaient 775 au lieu de 0755 ou moins.

Le chemin d'accès complet au fichier allowed_keys, c'est-à-dire /home/user/.ssh/, doit être 0755 ou inférieur.

3
Aditya Advani

D'après mes conclusions, la moindre permission du directeur d'origine de la cible est 750. Si le bit du monde n'est pas 0, cela ne fonctionnera pas.

Par exemple. pour le répertoire de root:

drwxr-x--- 3 root root 4096 Jul 20 11:57 root

Suivant est /root/.ssh

drwx------  2 root root  4096 Jul 17 03:28 .ssh

Alors /root/.ssh/authorized_keys

-rw------- 1 root root 1179 Jul 17 03:28 authorized_keys
3
David Wee

Après avoir beaucoup troublé, j'ai eu la solution du problème:

Le répertoire de base de l'utilisateur ne doit pas avoir la permission 777 ou le monde accessible en écriture. Si tel est le cas, la vérification de la clé SSH échouera et vous devrez saisir un mot de passe pour vous connecter.

2
user2357653

Si votre /etc/ssh/sshd_config n'a pas de commentaire sur la ligne suivante, votre configuration SSH ne permet qu'une liste fixe d'utilisateurs à ssh dans le système et vous devez ajouter les nouveaux comptes à la liste:

AllowUsers root user1 user2 user3

Tous les utilisateurs autres que ceux énumérés ci-dessus qui tentent de se connecter via SSH recevraient les messages d'erreur suivants:

Roaming not allowed by server
1
Tilo

Assurez-vous simplement que le compte sur lequel vous essayez de ssh est un utilisateur avec un mot de passe sur le serveur distant. Je me suis juste cogné la tête contre le mur pendant une demi-heure avant de trouver cette réponse ici: https://stackoverflow.com/a/14421105/758174

1
Pierre D

J'ai découvert qu'après avoir changé mon nom d'utilisateur et mon nom de groupe (mais pas mes identifiants) dans /etc/passwd et /etc/group, mais en oubliant de changer /etc/shadow en conséquence, le même message "Aucune itinérance autorisée" a été reçu.

0
andrew