web-dev-qa-db-fra.com

SSH: "Serveur a refusé notre clé" sans raison

J'essayais de configurer un script de sauvegarde simple pour fonctionner automatiquement qui copierait un fichier d'une machine Windows à un SSH de Linux via SSH.

Comme beaucoup de simples tutoriels en ligne suggèrent que j'ai utilisé pscp avec une clé privée générée avec puttygen et placé la clé publique correspondante (présentée sous forme de copie/colle par mastic lui-même) dans le authorized_keys fichier sous Linux. Cela semble assez simple considérant que cela a fonctionné dans 2 autres machines Windows à une machine Linux différente, avec la même configuration.

Il n'y a pas de problèmes de connectivité AFAICS et il en va de même pour SSH, en considérant que je suis capable de vous connecter en tant que root sur la machine Linux. Le fichier de configuration (sshd_config) a le AuthorizedKeysFile défini sur ~/.sshd/authorized_keys.

L'erreur "Server refusé notre clé" continue de s'afficher, peu importe ce que je fais ... Les journaux ne montrent pas de problèmes d'authentification ...

Je prévois de faire plus de test et de réglage de la valeur logLevel _ VERBOSE ou DEBUG2 ou 3 mais compte tenu de l'urgence de la matière et de la Le fait que, pour le tester réellement sur la machine, je dois passer beaucoup de tracas en considérant la machine est dans un endroit assez éloigné de mon lieu de travail réel ...

Des questions

  • Quelqu'un a-t-il une idée?
  • Cela est-il déjà arrivé à quiconque?

Il semble que cela pourrait réellement être un problème lié aux versions SSH ou à quelque chose de la sorte ...

J'avais également envisagé la possibilité que je dois avoir la clé publique insérée dans le fichier authorized_keys à l'intérieur de l'utilisateur .ssh (/user/.ssh/) en plus de l'avoir en racine Dossier (n'a pas beaucoup de sens en raison de la valeur de AuthorizedKeysFile in sshd_config).

J'ai fait quelque chose avec le SSH Server's LogLevel Set O _ VERBOSE _ mais je ne pouvais pas récupérer les informations (problèmes de responsabilité), donc ici, c'est plutôt un journal de sortie/débogage d'une autre source qui Semble afficher la même erreur ...

Connection from 192.168.0.101 port 4288
debug1: Client protocol version 2.0; client software version OpenSSH_4.5
debug1: match: OpenSSH_4.5 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.5
debug1: permanently_set_uid: 22/22
debug1: list_hostkey_types: ssh-rsa,ssh-dss
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST received
debug1: SSH2_MSG_KEX_DH_GEX_GROUP sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_INIT
debug1: SSH2_MSG_KEX_DH_GEX_REPLY sent
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: KEX done
debug1: userauth-request for user dcowsill service ssh-connection method none
debug1: attempt 0 failures 0
debug1: PAM: initializing for "dcowsill"
debug1: userauth-request for user dcowsill service ssh-connection method publickey
debug1: attempt 1 failures 1
debug1: test whether pkalg/pkblob are acceptable
debug1: PAM: setting PAM_RHOST to "192.168.0.101"
debug1: PAM: setting PAM_TTY to "ssh"
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
Failed publickey for dcowsill from 192.168.0.101 port 4288 ssh2
debug1: userauth-request for user dcowsill service ssh-connection method publickey
debug1: attempt 2 failures 2
debug1: test whether pkalg/pkblob are acceptable
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 1052/105 (e=0/0)
debug1: trying public key file /testuser/.ssh/authorized_keys
debug1: restore_uid: 0/0
Failed publickey for dcowsill from 192.168.0.101 port 4288 ssh2
Connection closed by 192.168.0.101

Il semble que le programme tente d'ouvrir le fichier authorized_keys avec des autorisations du propriétaire, mais il n'y a plus d'informations sur ce qui générera le problème. Une dernière chose, j'ai vérifié et vérifié les autorisations de fichier et de foleur et ils sont tous ok.

6
besnico

Certaines raisons possibles que je connais sont liées à des autorisations de fichier qui sont principalement trop larges et particulièrement que je peux rappeler deux raisons.

  1. exposer/Accueil/Annuaire utilisateur à plus que le propriétaire
  2. .ssh et/ou autorisations_Keys Les autorisations de fichiers (les définir à 700/600 respectivement si elles sont plus que cela)

la raison exacte de la clé est refusée en démarrant un serveur SSHD supplémentaire sur un autre port avec des options de débogage et de non-démon si vous disposez d'un accès root sur le serveur, vous pouvez exécuter:

Sudo `which sshd` -p 2020 -Dd

sur le serveur

Après avoir quitté cela, courez-vous SSH:

ssh -p 2020 -i /path/to/refusedkey

La sortie du serveur vous indiquera la raison du refus

8
Tagwint

un chèque évident

  • format d'autorisations_Keys ssh-rsa AA...long_line_of_char comment Putty Gen un jour donnant une autre forme.

  • autorisation:

    • ~ User/.SSH/Authorize_Keys est -RW-R - R--
    • ~ utilisateur/.ssh/est drwx ------
    • ~ L'utilisateur n'est pas une écriture mondiale.
  • la touche doit être déployée ID ~ racine ou in ~ utilisateur en fonction de l'utilisateur que vous vous connectez.

certains moins évidents:

  • la racine n'est pas autorisée à être ssh'd à. (PermitRootLogin no ou commenter)
  • emplacement par défaut pour autorisations_Keys AuthorizedKeysFile %h/.ssh/authorized_keys

    • c'est .sh sous ~ répertoire de base de l'utilisateur.
  • exemple d'emplacement personnalisé pour Autherized_Keys AuthorizedKeysFile /foo/bar/authorized_keys.%h

    • c'est-à-dire que les clés sont situées dans /foo/bar dir.
    • dans le fichier authorized_keys.root pour la racine
    • dans le fichier authorized_keys.user Pour l'utilisateur, le fichier appartient à la racine
2
Archemar

Courir:

Sudo `which sshd` -p 2020 -Dd

en tant que root en une session et dans une autre session, courez:

ssh -p 2020 -i /path/to/refusedkey refusedkeyusername@hostname

Travaillé pour moi pour avoir la raison. Mes autorisations d'utilisateur n'ont pas été définies sur 700. J'ai eu le O/P comme ci-dessous

debug1: trying public key file /home/userid/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
Authentication refused: **bad ownership** or modes for directory /home/sapadmin
debug1: restore_uid: 0/0
Failed publickey for userid from 172.31.2.12 port 27382 ssh2: RSA 
Connection closed by 172.31.2.12 [preauth]
1
Thomas

d'accord! Une des raisons est que le répertoire de base d'utilisateurs du fichier passwd n'est pas le répertoire à partir duquel vous souhaitez copier les fichiers. Seule la racine peut copier de chaque ware, les autres utilisateurs non!

par exemple, si vous souhaitez copier/copier répertoire, assurez-vous que l'utilisateur que vous souhaitez authentifier avez le répertoire de maison défini sur/sauvegarder (en possession de celui-ci), pour SCP pour trouver le chemin correspondant à autorisé_keys "/BackUp/.SSH/ autorisé_key "

deuxièmement: Assurez-vous de copier un fichier Authorized_Keys exactement le texte du générateur de clé de mastic avec "SSH-RSA AA ...." à une seule ligne. Vous pouvez supprimer tout commentaire comme "rsa-key-xxx .." à partir de la fin. Le fichier autorisé_keys doit posséder un utilisateur/groupe bonne chance!

0
Ove

Dans mon cas, je l'ai résolu en faisant:

chmod 700 myuserdir/.ssh
chmod 600 myuserdir/.ssh/authorized_keys

Dans la zone Windows, au lieu d'utiliser PutTygen pour générer la clé privée RSA, j'ai téléchargé Cygwin de Cygwin.org. Il offre quelques packages par défaut. J'ai modifié le package net pour installer OpenSSH. Cela a notamment installé le programme SSH-Keygen. Alors, j'ai couru:

  • ssh-keygen -t rsa et a quitté le code d'accès vide
  • Cela a créé la clé privée nommée id_rsa dans c:/cygwin/home/myusername/.ssh
  • J'ai démarré putygen et sélectionnez l'option de menu "Fichier -> Charger la clé privée" et sélectionnez votre id_rsa (pas le public id_rsa.pub).
  • Enregistrez-le dans le format de Putty Cliquez sur le bouton "Enregistrer la clé privée" (je l'ai appelé Putty.ppk)
  • Démarrez le mastic et sélectionnez Connection -> SSH -> Auth -> Touche privée pour l'authentification. Entrer le PuTTY.ppk généré.
  • Entrez votre nom d'utilisateur dans PUTTY: Connexion -> Données -> Nom d'utilisateur auto-identifiant

Maintenant, je peux me connecter sans entrer ni utilisateur ni mot de passe.

0
Carlos

À partir du journal du serveur de débogage que vous avez partagé, il semble que la touche que vous avez spécifiée sur le côté client ne correspond à aucune des personnes disponibles dans /Testuser/.ssh/authorize_keys.

si /testuser/.ssh/Authorized_Keys est l'emplacement prévu que vous devriez vérifier qu'il existe une ligne de clé publique qui correspond à votre clé privée utilisée sur le côté client - c'est-à-dire si vous utilisez Say, id_rsa sur la vérification du client ID_RSA.PUB à côté de Il correspond exactement à l'une des lignes de /testuser/.ssh/authorized_keys.

Si vous doutez de l'emplacement du fichier agréé_keys sur le serveur, vous devez déterminer si vous spécifiez le bon nom d'utilisateur du côté du client.

0
Tagwint