web-dev-qa-db-fra.com

Configuration d'OpenSSH pour Windows à l'aide de l'authentification par clé publique

Je rencontre des problèmes pour configurer OpenSSH pour Windows en utilisant l'authentification par clé publique.

Je travaille sur mon bureau local et je peux utiliser SSH avec une clé de machines Unix ou d’autres machines OpenSSH pour Windows.

J'ai répliqué la construction sur un serveur, l'authentification par mot de passe fonctionne correctement, mais lorsque j'utilise les clés, le problème suivant s'affiche:

debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /cygdrive/c/sshusers/jsadmint2232/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Connection closed by 127.0.0.1

Donc, dans le but de tester, je viens d'essayer de SSH à localhost, mais même quand essayé à distance, j'obtiens le même problème.

Encore plus étrange, c’est que lorsque le mot de passe et la clé publique sont activés dans sshd_config, il essaiera uniquement d’utiliser des clés, puis s’envolera avec le message ci-dessus, sans même essayer d’utiliser un mot de passe.

Voici les mesures que j'ai prises:

  1. Installer OpenSSH pour Windows
  2. mkgroup -l >> ..\etc\group (groupes locaux ajoutés)
  3. mkgroup -d >> ..\etc\group (groupes de domaine ajoutés)
  4. mkpasswd -L -u openssh >> ..\passwd (ajouté à mon utilisateur local)
  5. mkpasswd -D -u jsadmint2232 >> ..\passwd (ajouté mon utilisateur de domaine)
  6. Édité le répertoire racine dans passwd pour qu'il pointe vers c:\sshusers \% USER% - où% USER% correspond au nom d'utilisateur.
  7. Activation du mot de passe, désactivation de la clé
  8. Création de clés SSH pour jsadmint2232/openssh et vérification de la création des fichiers dans les répertoires de stockage.
  9. Ajout de fichiers allowed_keys dans les répertoires .ssh pour chaque utilisateur et ajout de clés pour les utilisateurs se connectant entrants
  10. net stop opensshd/net start opensshd
  11. Test Password auth fonctionne à la fois localement et à distance
  12. Mise à jour de sshd_config, pour activer la clé d'authentification - redémarrer opensshd
  13. Testez la connexion et obtenez l'erreur ci-dessus, n'essayez même pas d'authentification de mot de passe?
  14. Mise à jour de sshd_config, pour désactiver complètement l’authentification par mot de passe - redémarrez opensshd
  15. Testez la connexion et obtenez toujours l'erreur ci-dessus

Il semble que le serveur tue la connexion pour une raison quelconque?

11
Cambolie

J'ai résolu le problème ...

Il est lié au compte qui a démarré le service (il utilisait le compte système local), ce qui l’empêchait d’accéder à la clé de publication et au fichier allowed_keys.

Une fois que j'ai arrêté le service et commencé en tant qu'utilisateur auquel je tentais de me connecter, cela a fonctionné!

Donc, en gros, vous devez commencer par un compte de service, puis les utilisateurs externes se connectent en tant que cet utilisateur.

4
Cambolie

Voici les étapes de configuration d'OpenSSH livré avec Windows 10 v.1803 (mise à jour d'avril 2018). Voir les commentaires dans cet article, il est possible que cela ne fonctionne pas avec 1809).

Configuration du serveur (PowerShell élevé):

  1. Installez le serveur OpenSSH: Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0.

  2. Démarrer l'agent et les services sshd: Start-Service ssh-agent; Start-Service sshd (ceci générera automatiquement les clés de l'hôte et la configuration par défaut dans $env:ProgramData\ssh).

  3. [Facultatif] Installez le module OpenSSHUtils powershell: Install-Module -Force OpenSSHUtils

Configuration du client (PowerShell non élevé):

  1. Générez la clé utilisateur: cd $env:USERPROFILE\.ssh; ssh-keygen.exe, suivez les instructions et acceptez l'emplacement de fichier suggéré par défaut. Cela créera 2 fichiers: id_rsa et id_rsa.pub;

  2. [Facultatif] ajoutez la clé à l'agent d'authentification afin d'éviter de saisir un mot de passe à chaque utilisation: ssh-add .\id_rsa (ou le fichier généré);

Configuration du serveur poursuivie (PowerShell non élevé):

  1. Connectez-vous en tant qu'utilisateur pour lequel vous souhaitez utiliser une clé publique.
  2. cd $env:USERPROFILE; mkdir .ssh; cd .ssh; New-Item authorized_keys;
  3. Collez le contenu du fichier id_rsa.pub du client dans le fichier .ssh\authorized_keys de l'étape précédente.
  4. Installer correctement les autorisations (important !!!):
    1. Exécutez start . pour ouvrir l'Explorateur avec le dossier actuel ($env:USERPROFILE\.ssh);
    2. Faites un clic droit authorized_keys, allez à Properties -> Security -> Advanced
    3. Cliquez sur "Désactiver l'héritage";
    4. Choisissez "Convertir les autorisations héritées en autorisations explicites sur cet objet" lorsque vous y êtes invité.
    5. (vraiment, vraiment important) Supprimez toutes les autorisations sur le fichier, à l'exception de SYSTEM et de vous-même. Il doit y avoir exactement deux entrées de permission sur le fichier. Certains guides suggèrent d’exécuter le Repair-AuthorizedKeyPermission $env:USERPROFILE\.ssh\authorized_keys - ceci essayera d’ajouter l’utilisateur sshd à la liste des permissions et il sera rompra l’authentification, donc ne le faites pas, ou du moins ne vous mettez pas d’accord pour ajouter l’utilisateur sshd) . SYSTEM et vous-même devriez avoir le plein contrôle du fichier.

Client:

  1. Exécutez ssh <serverusername>@<serverhostname>. Cela devrait fonctionner à ce stade.

J'ai essayé avec Windows 10 en tant que serveur et les deux et avec Debian Linux en tant que client.

EDIT: (voir la section commentaire ci-dessous) La construction actuelle de Windows nécessite également de commenter ce qui suit dans

PS C:\ProgramData\ssh> bash -c 'vim sshd_config'

# Match Group administrators                                                    
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys  
22
n0rd

Si vous utilisez la version d'OpenSSH de mls-software.com, voici une autre remarque.

Si vous installez à l'aide du compte SSHD_SERVER et de la séparation des privilèges, vous pourrez utiliser l'authentification par clé publique (selon http://www.mls-software.com/opensshd-pki.html ). Toutefois, si le contrôle de compte d'utilisateur est activé, l'installation ne sera pas réussie. Les utilisateurs ne seront pas créés correctement et le service ne sera pas créé. Il est très difficile d’essayer manuellement d’obtenir ces articles après coup. Désactiver simplement le contrôle de compte d'utilisateur avant l'installation permettra au processus d'installation de créer correctement le ou les utilisateurs et le service. Après l'installation, vous pouvez réactiver le contrôle de compte d'utilisateur.

Lorsque j'ai créé le compte SSHD_SERVER manuellement, l'authentification a réussi lors de l'utilisation de l'authentification par mot de passe, mais le client a mis fin à la connexion avec "/ bin/bash: opération non autorisée". L'authentification avec les clés publiques a été fermée par le serveur (erreur originale signalée par Cambolie).

3
Dustin

Je l'ai résolu par:

  1. Installation en mode de séparation des privilèges SSHD_SERVER +. J'ai également défini manuellement la séparation des privilèges sur "oui" dans la configuration. Cela n'a pas fonctionné pour moi pendant longtemps, l'utilisateur n'a pas été créé. Ensuite, cela a fonctionné, je ne sais pas pourquoi. Je ne suis allé que dans les comptes utilisateur du panneau de configuration pour vérifier que le contrôle de compte d'utilisateur est désactivé. J'ai aussi eu/var/empty avec un accès complet pour tout le monde.
  2. Pour C:\openssh\var\empty, j'ai défini les autorisations "attributs obtenir/définir" sur Tout le monde et moi-même et les autorisations "complètes" sur.\Sshd_server. J'en ai aussi fait le propriétaire.
1
Mikhail Orlov