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 [email protected] -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
[email protected]: Permission denied (publickey).

C:\>
C:\>
C:\>ssh [email protected] -i private-key.ppm
Warning: Identity file private-key.ppm not accessible: No such file or directory.
[email protected]: Permission denied (publickey).

C:\>
Sabrina
fonte
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

iBug
fonte
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%
JW0914
fonte
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

Parv Sharma
fonte
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
[email protected]: Permission denied (publickey).

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

Rich S
fonte
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

Artur Mustafin
fonte
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>

JKauffman
fonte
2

use o comando abaixo na sua chave que funciona no Windows

icacls .\private.key /inheritance:r
icacls .\private.key /grant:r "%username%":"(R)"
Walter Ferrao
fonte
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)"
manjuv
fonte
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 $_
}
bbarker
fonte
0

Use Mingw-w64.

Informações: http://mingw-w64.org/doku.php

Faça o download com o Git for Windows ou diretamente.

Disponível aqui: https://github.com/mirror/mingw-w64

git clone https://github.com/mirror/mingw-w64

Ele também possui outros comandos úteis do Linux, como tare gzip.

Dallas Clarke
fonte
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.

Alex Ramses
fonte
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

preguiçoso
fonte