Je me bats avec ça depuis quelques heures donc toute aide est grandement appréciée ...
J'ai 2x serveurs tous les deux que je peux ssh
avec des clés publiques d'OSX, aucun problème là-bas donc je suis certain que tout va bien avec sshd_config
.
J'essaie de configurer un travail cron pour rsync
pour synchroniser les deux serveurs et j'ai besoin du serveur B (sauvegarde) sur ssh
dans le serveur A à l'aide d'une clé publique.
Pour la vie de moi, je ne peux pas comprendre pourquoi il ne trouve pas mes clés publiques - elles sont dans ~/.ssh/
(c'est à dire. /root/.ssh
) et toutes les autorisations de fichiers sont correctes sur A & B.
Voici la sortie:
debug2: we did not send a packet, disable method
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/identity
debug3: no such identity: /root/.ssh/identity
debug1: Trying private key: /root/.ssh/id_rsa
debug3: no such identity: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
Notez également qu'il recherche des clés privées qui n'existent pas ...
drwx------. 2 root root 4096 May 25 10:15 .
dr-xr-x---. 4 root root 4096 May 24 18:52 ..
-rw-------. 1 root root 403 May 25 01:37 authorized_keys
-rw-------. 1 root root 0 May 25 01:41 config
-rw-------. 1 root root 1675 May 25 02:35 id_rsa_tm1
-rw-------. 1 root root 405 May 25 02:35 id_rsa_tm1.pub
-rw-------. 1 root root 395 May 25 02:36 known_hosts
Jetez un œil à votre page de manuel ssh:
-i identity_file
Selects a file from which the identity (private key) for public
key authentication is read. The default is ~/.ssh/identity for
protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2.
Identity files may also be specified on a per-Host basis in the
configuration file. It is possible to have multiple -i options
(and multiple identities specified in configuration files).
ou la page de manuel ssh_config:
IdentityFile
Specifies a file from which the user's DSA, ECDSA, ED25519 or
RSA authentication identity is read. The default is
~/.ssh/identity for protocol version 1, and ~/.ssh/id_dsa,
~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for proto‐
col version 2. Additionally, any identities represented by the
authentication agent will be used for authentication unless
IdentitiesOnly is set.
Vous voyez, il y a quelques noms de fichiers spéciaux qui sont essayés si vous ne spécifiez pas de clé. Ce sont également les fichiers que vous voyez dans votre sortie de journal.
Pour utiliser une clé dans un fichier avec un nom différent, vous avez trois options:
-i
ci-dessus.IdentityFile
ci-dessus.ssh-add
.Pour les sessions interactives, l'agent est le plus flexible. Pour votre tâche cron, l'option -i
Est probablement la plus simple.
Un fichier author_keys mal formé sur l'hôte de destination est une autre raison pour laquelle ssh envoie le message "nous n'avons pas envoyé de paquet" et demande un mot de passe au lieu d'utiliser l'authentification par clé de pub: -
debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method
Le problème dans ce cas particulier était que les données de clé publique, qui avaient été collées dans .ssh/authorized_keys
sur l'hôte de destination, il manquait son premier caractère: -
sh-rsa AAAA...
La solution consistait simplement à ajouter les "s" manquants.
ssh-rsa AAAA...
Et donc:-
debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
...
debug1: Authentication succeeded (publickey).
Cette chaîne exacte de messages d'erreur dans la question peut également se produire dans le cas d'une paire de clés privée/publique appariée du côté local. Non, cela n'a aucun sens, mais je me suis arraché les cheveux pendant longtemps en essayant de comprendre ce qui se passait.
.ssh/mykey.pub
copié dans .ssh/authorized_keys
..ssh/mykey
qui est la bonne clé privée pour correspondre à la clé publique du système A, mais qui a également un .ssh/mykey.pub
fichier qui est une erreur de correspondance, peut-être la version précédente d'une clé remplacée.SSH de B vers A (ssh -i mykey A
) échouera avec les messages de la question, notamment si vous activez -vv
du client ssh vous verrez:
Essayer la clé privée: .ssh/mykey
nous n'avons pas envoyé de paquet, désactivez la méthode
C'est un mensonge parce que la clé réelle n'a pas été essayée, elle a apparemment utilisé le fichier de clé publique locale avec le nom correspondant pour déterminer s'il était susceptible de fonctionner et n'a ensuite rien fait en cas de non-concordance. Aucune quantité d'informations de débogage de chaque côté ne fait vraiment allusion au problème.
Un moyen simple de déboguer dans Debian/Ubuntu est: se connecter avec un mot de passe et suivre le journal
tail -f /var/log/auth.log
Essayez de vous connecter à partir d'un autre terminal et vous verrez l'erreur ...
Dans mon cas, le répertoire/root était 770 et non 700 qui est la valeur par défaut L'erreur était "Authentification refusée: mauvaise propriété ou modes pour le répertoire/root"
Corrigez cela et vous avez terminé.
Les noms de fichiers par défaut recherchés par ssh sont id_rsa
et id_rsa.pub
.
Si vous souhaitez utiliser d'autres noms de fichiers, vous devez soit les spécifier dans ssh_config
(en utilisant le paramètre IdentityFile
) ou via le paramètre ssh ligne de commande-i
.
J'ai eu le même problème sur RedHat; vérifié les journaux et constaté que le répertoire personnel avait des droits d’utilisateur incorrects.
sshd[2507]: Authentication refused: bad ownership or modes for directory /home/user
La correction des droits du répertoire d'origine a résolu ce problème.
Essayer
/sbin/restorecon -r /root/.ssh
Un problème possible avec le contexte de vente
[J'ai été mordu par cette vague erreur aujourd'hui, alors j'ajoute à la liste possible les causes du message "nous n'avons pas envoyé de paquet, désactivez la méthode" debug2. ]
Il peut s'agir du compte auquel vous vous connectez car (sur le système distant) n'a pas accès en lecture au fichier de clé publique (sur le système distant). Par exemple, dans notre environnement, nous avons un emplacement AuthorizedKeysFile
personnalisé spécifié dans /etc/ssh/sshd_config
:
AuthorizedKeysFile /usr/local/etc/ssh_authorized_keys/%u_pub
Et /usr/local/etc/
d'une manière ou d'une autre, ses autorisations ont été modifiées en:
drwx------. 3 root root 29 Feb 20 2018 /usr/local/etc/
Résolu en (re) définissant les autorisations pour:
drwxr-xr-x. 3 root root 29 Feb 20 2018 /usr/local/etc/
Après avoir couru
ssh-copy-id user@remote-Host
normalement, cela devrait fonctionner. Mais s'il échoue, essayez ceci: connectez-vous à l'hôte distant en tant qu'utilisateur auquel vous souhaitez vous connecter à l'avenir et exécutez:
ssh-keygen
Ça m'a aidé.
Donc, ce qui m'est arrivé, c'est que j'ai 2 machines virtuelles auxquelles accéder depuis ma machine locale (2 clés id_rsa.pub et id_rsa2.pub). J'ai réalisé que ma connexion ssh utilise id_rsa.pub par défaut pour toute connexion ssh [email protected]. J'ai résolu mon problème en ajoutant un fichier de configuration et en spécifiant l'identité à utiliser pour chaque hôte, comme suit:
vi ~/.ssh/config
Add both hostnames and their identity file as follows:
Host server1.nixcraft.com
IdentityFile ~/Users/.ssh/id_rsa1
Host server2.nixcraft.com
IdentityFile /backup/home/aymen/.ssh/id_rsa2