SSH do Windows: as permissões para 'chave privada' estão muito abertas


101

Eu tenho o OpenSSH 7.6 instalado no Windows 7 para fins de teste. O cliente e servidor SSH funcionam bem até que eu tentei acessar uma das minhas caixas do AWS EC2 a partir desta janela.

Parece que preciso alterar a permissão no arquivo de chave privada. Isso pode ser feito facilmente no unix / linux com o chmodcomando

E as janelas?

private-key.ppm é copiado diretamente da AWS e acho que também a permissão.

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:\>

Você já tentou modificar a ACL?
Ignacio Vazquez-Abrams

11
Sua chave privada está realmente no caminho C: \ root? Eu posso ver por que está reclamando, como normalmente as coisas em C: \ são acessíveis a todos. Você tentou movê-lo para uma pasta que somente você como usuário tem acesso (por exemplo, C: \ Users \ nome_de_usuário \ desktop) e ver se essa mensagem ainda aparece?
Dario

@ Darius, sim é. Quando você copia um arquivo do unix / linux para o windows, a permissão também é copiada. Eu preciso mudar isso, mas não sei como fazê-lo no Windows. Isso pode ser feito facilmente no unix / linux com o comando chmod.
Sabrina

@ IgnacioVazquez-Abrams, ACL? Que tipo de ACL?
Sabrina

11
@Sabrina Você pode usar o comando icacls para alterar a permissão ou simplesmente clicar com o botão direito do mouse na Chave Privada, escolher Propriedades e verificar na guia "Segurança". E verifique se ele é acessível somente por você / quem quer que possa acessar a chave privada. Se "Usuários" tiverem acesso de leitura - significa que qualquer pessoa que tenha acesso ao sistema pode ler essa chave privada.
Dário

Respostas:


118

Você localiza o arquivo no Windows Explorer, clique com o botão direito do mouse e selecione "Propriedades". Navegue até a guia "Segurança" e clique em "Avançado".

Mude o proprietário para você, desative a herança e exclua todas as permissões. Em seguida, conceda a si mesmo "Controle total" e salve as permissões. Agora, o SSH não vai mais reclamar da permissão de arquivo aberta.

Ele deve ficar assim:

insira a descrição da imagem aqui


2
Gostaria apenas de adicionar 1) Este método funciona na minha 10.0.17134.191caixa do Windows 10 ( ) com Cygwin ver CYGWIN_NT-10.0-WOW 2.3.1(0.291/5/3) 2015-11-14 12:42e ssh ver OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4e 2) Obrigado! @iBug!
Atreyu 28/07/19

Se o arquivo da chave estiver no Thumb Drive / disco Flash, essa guia Segurança não estará disponível!
Dylan B

@DylanB Por que você colocou credenciais em uma unidade removível? (De fato, essa guia está disponível apenas em sistemas de arquivos NTFS - você pode formatar sua unidade em NTFS facilmente).
iBug 14/08/18

11
Na verdade, eu fiz isso e ainda reclama que as permissões 0777 são muito abertas.
Aaron Bramson

10
Por que isso é tão difícil no Windows, alguém pode simplesmente adicionar uma opção de comando --ignore-stupid-rule?
Liam Mitchell

21

As chaves devem estar acessíveis apenas ao usuário a que se destinam e nenhuma outra conta, serviço ou grupo.

  • GUI:
    • [Arquivo] Propriedades - Segurança - Avançado
      1. Defina Proprietário como o usuário da chave
      2. Remova todos os usuários, grupos e serviços, exceto o usuário da chave , em Entradas de permissão
      3. Defina o usuário da chave como Controle total


  • CLI:

    :: Set Variable ::
    set key="C:\Path\to\key"
    
    :: Remove Inheritance ::
    cmd /c icacls %key% /c /t /inheritance:d
    
    :: Set Ownership to Owner ::
    cmd /c icacls %key% /c /t /grant %username%:F
    
    :: Remove All Users, except for Owner ::
    cmd /c icacls %key%  /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
    
    :: Verify ::
    cmd /c icacls %key%

E se o proprietário for realmente um grupo? No meu caso, eu tenho um arquivo de propriedade de network servicemodo Cygwin acha que a permissão é 0770 em vez de 0700.
hyspace

Um arquivo deve pertencer a um usuário e um grupo, não apenas um grupo. Permissões de grupo são a 3ª octal [user é o 2º] em um quatro chaves de especificação e SSH octais não pode ser grupo ou outros acessível
JW0914

Esse é o caso do Unix. No Windows, network servicepode possuir um arquivo e é um grupo
hyspace

O Cygwin permite a funcionalidade da API POSIX no Windows, mas ainda opera sob as regras dos programas nativos baseados em UNIX (daí as permissões 3 e 4 octais em uma configuração do UGO). Embora você possa abrir um problema no GitHub do Win32-OpenSSH da Microsoft, uma vez que as chaves SSH devem ser de grupo e outras inacessíveis , provavelmente não há suporte para a propriedade da maneira que você descreve. É melhor estar em conformidade com a norma de um programa do que tentar configurá-lo de uma maneira [provavelmente] não suportada.
JW0914

11
essa deve ser a resposta correta. Obrigado pelas opções da CLI. GUI sempre é uma merda no caso do Windows.
shyammakwana.me 30/04

10

Além da resposta fornecida pelo ibug. Desde que eu estava usando o sistema ubuntu dentro do windows para executar o comando ssh. Ainda não estava funcionando. Então eu fiz

sudo ssh ...

e então funcionou


sudonão deve ser utilizado para abrir uma sessão SSH, pois é um risco à segurança. A única vez em que (pelo menos eu sei) a conta do root deve ser utilizada para abrir uma sessão SSH é em sistemas de usuário único (ou seja, normalmente encontrados nos sistemas operacionais do roteador [OpenWrt, DD-WRT, etc.] e outros sistemas embarcados ) . As chaves SSH devem estar acessíveis apenas ao usuário para o qual eles pertencem e nenhuma outra conta, serviço ou grupo.
JW0914

@ JW0914 LOL Eu tenho um servidor Debian de usuário único e o único usuário (login) é root. Não acho que um usuário extra não raiz seja benéfico porque é meu servidor pessoal e só logon quando realizo trabalhos de manutenção.
iBug 28/10

@iBug Por favor, releia meu comentário, pois parece que você perdeu totalmente a segunda frase ...
JW0914

5

Eu tive o mesmo problema e parece estar relacionado à versão do SSH que você está executando.

Se eu digitar

where ssh

Eu recebo...

C:\Windows\System32\OpenSSH\ssh.exe
C:\Program Files\Git\usr\bin\ssh.exe

Quando corro ssh -Vnos dois locais, recebo

OpenSSH_7.5p1, without OpenSSL
OpenSSH_7.3p1, OpenSSL 1.0.2k  26 Jan 2017

...respectivamente

Portanto, quando corro sshdo diretório git / bin, ele funciona bem e não reclama das permissões, mas executando a mesma linha de comando, usando a instalação anterior do SSH, ele volta com isso.

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

ps. as permissões no arquivo são apenas acesso total para mim e nada mais.


O OpenSSH não deve ser instalado no diretório do Windows por várias razões, desde a segurança, até ser um grande inconveniente, caso seja necessário corrigir um diretório corrompido do Windows via DISMou usando a opção Redefinir (que foi aprimorada para utilizar o diretório WinSxS versus reverter para o original install.esd) .
21418 JW0914

Isso é o que me ajudou, eu nunca consegui que a versão do Windows ssh funcionasse nesse cenário, apenas o Git :(
cudacoder

Essa também foi a solução para mim. Parece que o Windows 10 Pro agora inclui uma versão mais lenta do openssh. Fui forçado a remover a pasta C: \ Windows \ System32 \ OpenSSH e adicionar o sit.exe do git ao PATH.
Shukri Adams

Isso "corrigiu" para mim, usando C: \ Arquivos de programas \ Git \ usr \ bin \ ssh.exe funciona como C: \ Windows \ System32 \ OpenSSH \ ssh.exe não funciona
smartins 12/11

3

Você precisa do jsut 2 coisas:

1) Desativar herança insira a descrição da imagem aqui

2) Converter permissões herdadas em permissões explícitas insira a descrição da imagem aqui

3) grupo Remover usuários insira a descrição da imagem aqui

4) Você terminará sem que os usuários possam acessar arquivos particulares, isso deve ser suficiente para adicionar id_rsa. insira a descrição da imagem aqui


2

Eu tive um problema semelhante, mas estava no trabalho e não tenho a capacidade de alterar as permissões de arquivo no meu computador de trabalho. O que você precisa fazer é instalar o WSL e copiar a sua chave para o diretório ssh oculto no WSL:

cp <path to your key> ~/.ssh/<name of your key>

Agora você deve poder modificar as permissões normalmente.

sudo chmod 600 ~/.ssh/<your key's name>

Então ssh usando WSL:

ssh -i ~/.ssh/<name of your key> <username>@<ip address>


2

use o comando abaixo na sua chave que funciona no Windows

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

1

Você pode usar icacls no Windows em vez do chmod para ajustar a permissão do arquivo. Para dar ao usuário atual permissão de leitura e remover todo o resto,

icacls <file name> /inheritance:r
icacls <file name> /grant:r "%username%":"(R)"

0

Esta é apenas uma versão com script da resposta da CLI do @ JW0914, portanto, vote-o primeiro e acima de tudo. Além disso, é o meu primeiro script do PowerShell, portanto, sugestões são bem-vindas.

# 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 C:\DevContainerHome\.ssh -Force

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

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


0

Eu sou um usuário do Windows, usando o bash do Windows e segui todas as etapas para definir permissões usando a GUI do Windows, e ainda não funciona e reclama:

Permissions 0555 for 'my_ssh.pem' are too open.
It is required that your private key files are NOT accessible by others.

O que eu adicionei sudona frente do comando ssh e simplesmente funciona. Espero que isso seja útil para os outros.


Mas você faz login no servidor como você ou como root?
G-Man Diz 'Reinstate Monica'

Executo o terminal do Windows bash como eu, mas executei 'Run as adminstrator' quando inicio o Bash.
Alex Ramses

-1

Responder por iBug funciona bem! Você pode seguir isso e se livrar desse problema.

Mas há algumas coisas que precisam ser esclarecidas quando eu enfrentei problemas durante a configuração de permissões e demorei alguns minutos para descobrir o problema!

Após a resposta do iBug, você removerá todas as permissões, mas como definir a permissão Controle Total para si mesmo? foi aí que fiquei preso no começo porque não sabia como fazer isso.

Após desativar a herança, você poderá excluir todos os usuários ou grupos permitidos.

Feito isso,

Clique em Addseguida, clique em Set a Principalseguida, introduza Systeme Administratorse your email addreddno campo, no fundo, em seguida, clique em check names.

Carregará o nome se o usuário existir. Em seguida, clique em OK> Tipo Allow> Permissões básicas Full Control>Okay

Isso configurará a permissão Controle total para SYSTEM, Administrators e Your User.

Depois disso, tente ssh usando essa chave. Deve ser resolvido agora.

Eu tive o mesmo problema e resolvi isso usando esse método. Se houver algum usuário ou grupo com esse nome, ele será carregado.

-Screenshots-

Entradas de permissão Selecione um Principal / Selecionar Usuário ou Grupos

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.