339 votes

Windows SSH : Les permissions pour 'private-key' sont trop ouvertes

J'ai installé OpenSSH 7.6 sous Windows 7 à des fins de test. Le client et le serveur SSH fonctionnent parfaitement jusqu'à ce que j'essaie d'accéder à une de mes boîtes AWS EC2 à partir de ce Windows.

Il semble que je doive changer la permission sur le fichier de la clé privée. Cela peut être fait facilement sur unix/linux avec chmod commandement.

Et pour Windows ?

private-key.ppm est copié directement d'AWS et je suppose que la permission aussi.

C:\>ssh -V
OpenSSH_7.6p1, LibreSSL 2.5.3

C:\>ver

Microsoft Windows [Version 6.1.7601]

C:\>

C:\>ssh ubuntu@192.168.0.1 -i private-key.ppk
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'private-key.ppk' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "private-key.ppk": bad permissions
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>
C:\>
C:\>ssh ubuntu@192.168.0.1 -i private-key.ppm
Warning: Identity file private-key.ppm not accessible: No such file or directory.
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>

0 votes

Avez-vous essayé de modifier l'ACL ?

3 votes

Votre clé privée se trouve-t-elle réellement dans C:\le chemin de la racine ? Je comprends pourquoi il se plaint, car les éléments se trouvant dans C:\ sont généralement accessibles à tous. Avez-vous essayé de la déplacer dans un dossier auquel vous seul, en tant qu'utilisateur, avez accès (ex. C:\Users\username\desktop ) et voir si le message apparaît toujours ?

0 votes

@Darius, oui c'est le cas. Lorsque vous copiez un fichier d'unix/linux vers Windows, la permission est également copiée. J'ai besoin de changer cela mais je ne sais pas comment le faire sous Windows. Cela peut être fait facilement sur unix/linux avec la commande chmod.

18voto

Walter Ferrao Points 187

Utilisez la commande ci-dessous sur votre clé, elle fonctionne sous Windows.

icacls .\private.key /inheritance:r
icacls .\private.key /grant:r "%username%":"(R)"

12voto

Rich S Points 313

Cela semble être lié à la version d'OpenSSH que vous exécutez :

  • where ssh retours :

    %WinDir%\System32\OpenSSH\ssh.exe
    %ProgramFiles%\Git\usr\bin\ssh.exe

    ssh -V retours :

    # %WinDir%\System32\OpenSSH\ssh.exe
      OpenSSH_7.5p1, without OpenSSL
    
    # %ProgramFiles%\Git\usr\bin\ssh.exe
      OpenSSH_7.3p1, OpenSSL 1.0.2k  26 Jan 2017

En cours d'exécution ..\Git\usr\bin\ssh.exe il fonctionne bien et ne se plaint pas des permissions, mais en exécutant ..\OpenSSH\ssh.exe revient avec ce qui suit, même si les ACLs clés sont en accès complet pour moi et rien d'autre :

load key "t:\mykeys\rich-private.ppk": invalid format
  banana@127.0.0.127: Permission denied (publickey).

8voto

manjuv Points 97

Vous pouvez utiliser icacls dans Windows au lieu de chmod pour ajuster la permission du fichier. Pour donner à l'utilisateur actuel le droit de lecture et supprimer tout le reste :

Icacls <file name> /Inheritance:r
Icacls <file name> /Grant:r "%Username%":"(R)"

2voto

Lynn Edmiston Points 21
  1. Copiez les clés publiques et privées dans %userprofile%\.ssh

  2. Utilisez le batch script ci-dessous après avoir trouvé vos clés à partir de l'invite cmd avec where *.pub :

    Md %Userprofile%\.ssh
      Copy PublicKey %Userprofile%\.ssh
      Copy PrivateKey %Userprofile%\.ssh
    
    Cd %Userprofile%\.ssh
      Icacls .\PublicKey  /Inheritance:r
      Icacls .\PrivateKey /Inheritance:r
      Icacls .\PublicKey  /Grant:r "%Username%":"(F)"
      Icacls .\PrivateKey /Grant:r "%Username%":"(F)"
  3. Cliquez avec le bouton droit de la souris sur chaque fichier Propriétés de sécurité :
    Supprimez tout le monde sauf l'utilisateur, en fixant les autorisations pour l'utilisateur à Lire

1voto

bbarker Points 306

Ceci est juste une version scriptée de la réponse CLI de @JW0914, donc upvotez le avant tout :

# DO the following in powerhsell if not already done:
# Set-ExecutionPolicy RemoteSigned

# NOTE: edit the path in this command if needed
$sshFiles=Get-ChildItem -Path "$env:userprofile\.ssh" -Force

$sshFiles | % {
  $key = $_
  & icacls $key /c /t /inheritance:d
  & icacls $key /c /t /grant  "${echo $env:username}":F
  & icacls $key /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
}

# Verify:
$sshFiles | % {
  icacls $_
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X