SSH: "Serveur refusé notre key" sans raison

J'essayais de mettre en place un script de sauvegarde simple pour exécuter automatiquement qui copyrait un file d'une machine Windows vers un Linux via SSH.

Comme beaucoup de didacticiels en ligne simples suggèrent que j'ai utilisé pscp avec une key privée générée avec puttygen et placé la key publique correspondante (présentée sous forme de copyr / coller par putty lui-même) dans le file authorized_keys sous Linux. Cela semble assez simple étant donné que cela a fonctionné dans 2 autres machines Windows sur 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, étant donné que je suis capable de me connecter en tant que root à la machine Linux. Le file de configuration ( sshd_config ) a le file AuthorizedKeysFile défini sur ~/.sshd/authorized_keys .

L'erreur "Serveur refusé notre key" continue à apparaître, peu importe ce que je fais … Les journaux ne montrent aucun problème d'authentification …

Je logLevel de faire plus de tests et de définir la valeur de VERBOSE sur VERBOSE ou DEBUG2 ou 3 mais count tenu de l'urgence de la question et le fait que pour le tester réellement sur la machine je dois passer par beaucoup de soucis count tenu de la machine est dans un endroit qui est assez éloigné de mon lieu de travail actuel …

Des questions

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

Il semble que cela pourrait être un problème lié aux versions de ssh ou quelque chose du genre …

/user/.ssh/ aussi la possibilité d'avoir la key publique insérée dans le file authorized_keys dans le directory .ssh l'user ( /user/.ssh/ ) en plus de l'avoir dans le dossier de root (cela n'a pas beaucoup de sens à cause de la valeur de AuthorizedKeysFile dans sshd_config ).

J'ai fait un teting avec le jeu LogLevel du server ssh o VERBOSE mais je ne pouvais pas récupérer les informations (problèmes de responsabilité), alors voici un journal de sortie / debug 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 ssortingng 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 file authorized_keys avec les permissions du propriétaire, mais il n'y a plus d'informations sur ce qui génère le problème. Une dernière chose, j'ai vérifié et vérifié les permissions de file et de foler et tout va bien.

Certaines raisons possibles que je connais sont liées à des permissions de files, celles-ci sont la plupart du time trop larges et surtout je peux callbacker deux raisons

  1. exposant / home / user directory à plus que le propriétaire
  2. .ssh et / ou authorized_keys permissions de file (les mettre à 700/600 respectivement s'ils sont plus que cela)

la raison exacte de la key est refusée en démarrant un server sshd supplémentaire sur un autre port avec des options de debugging et de non-démon si vous avez un access root sur le server que vous pouvez exécuter:

 sudo `which sshd` -p 2020 -Dd 

sur le server

Après avoir quitté cette course, lancez-la ssh:

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

La sortie du server vous indiquera la raison du refus

une vérification évidente

  • format de authorized_keys ssh-rsa AA...long_line_of_char comment putty gen parfois donner une autre forme.

  • autorisation:

    • ~ user / .ssh / authorized_keys est -rw-r -r–
    • ~ user / .ssh / est drwx ——
    • ~ l'user n'est pas inscriptible dans le monde.
  • la key doit être déployée id ~ root ou dans ~ user en fonction de l'user auquel vous vous connectez.

certains less évidents:

  • root n'est pas autorisé à être ssh'd. ( PermitRootLogin no ou commentaire)
  • location par défaut pour authorized_keys AuthorizedKeysFile %h/.ssh/authorized_keys

    • c'est-à-dire .ssh sous le directory home de l'user.
  • exemple d'location personnalisé pour authorized_keys AuthorizedKeysFile /foo/bar/authorized_keys.%h

    • c'est-à-dire les keys, se trouvent dans /foo/bar dir.
    • dans le file authorized_keys.root for root
    • dans le file authorized_keys.user pour l'user, le file appartient à root

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

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

Sur la boîte des windows, au lieu d'utiliser puttygen pour générer la key 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 installé, entre autres, le programme ssh-keygen. Donc, j'ai couru:

  • ssh-keygen -t rsa et laissé le mot de passe vide
  • Cela a créé la key privée nommée id_rsa dans c:/cygwin/home/myusername/.ssh
  • J'ai commencé puttygen et select l'option de menu "Fichier -> Charger la key privée" et select votre id_rsa (pas le public id_rsa.pub ).
  • Enregistrez-le en format mastic en cliquant sur le button "Enregistrer la key privée" (je l'ai appelé putty.ppk)
  • Démarrer mastic et select login -> SSH -> Auth -> Clé privée pour l'authentification. Entrez le putty.ppk généré.
  • Entrez votre nom d'user dans mastic: login -> Données -> Nom d'user de connection automatique

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

Courir:

 sudo `which sshd` -p 2020 -Dd 

en tant que root dans une session et dans une autre session exécutée:

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

A travaillé pour moi d'get la raison. Mes permissions d'user n'ont pas été définies à 700. J'ai eu l'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] 

D'accord! L'une des raisons est que le directory de base de l'user du file passwd n'est pas le directory à partir duquel vous voulez copyr les files. Seule la racine peut copyr de chaque article, les autres users non!

Par exemple, si vous voulez copyr à partir du directory / backup, assurez-vous que l'user que vous voulez authentifier a le directory de base défini sur / backup (appartenant à lui), pour que scp trouve le path corect à authorized_keys "/backup/.ssh/ authorized_key "

deuxièmement: veillez à copyr dans le file authorized_keys exactement le text de Putty Key Generator avec "ssh-rsa AA …." sur une seule ligne. vous pouvez supprimer tout commentaire comme "rsa-key-xxx .." à la fin. Le file authorized_keys doit posséder l'user / groupe bonne chance!

A partir du journal du server de debugging que vous avez partagé, il semble que la key que vous avez spécifiée du côté client ne correspond à aucun des files disponibles dans /testuser/.ssh/authorized_keys.

si /testuser/.ssh/authorized_keys est l'location attendu, vous devriez vérifier qu'il y a une ligne de key publique correspondant à votre key privée utilisée côté client – c'est-à-dire si vous utilisez say, id_rsa sur le client, vérifiez id_rsa.pub à côté de il correspond exactement à l'une des lignes de /testuser/.ssh/authorized_keys.

Si vous doutez du file authorized_keys de l'location sur le server, vous devez déterminer si vous spécifiez le bon nom d'user côté client.