Pergunta

Recentemente eu fui incapaz de clone ou push para o github, e eu estou tentando encontrar a causa raiz.

Isso é no windows

Eu tenho o cygwin + git bem como msysgit.

Msysgit foi instalado com as seguintes opções:

  • OpenSSH
  • O uso do Git a partir do Prompt de Comando do Windows

Que me dá 4 ambientes para tentar usar o git em:

  • O Windows prompt de comando
  • Powershell
  • O Git Bash
  • O Cygwin

De alguma maneira eu consegui me coloco em uma posição onde quando eu tentar clonar um repositório usando o msysgit, cmd.exe ou o Powershell, recebo o seguinte erro:

> Initialized empty Git repository in
> C:/sandbox/SomeProject/.git/
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @    WARNING: UNPROTECTED PRIVATE KEY FILE!          @
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> Permissions 0644 for
> '/c/Users/Ben/.ssh/id_rsa' are too
> open. It is recommended that your
> private key files are NOT accessible
> by others. This private key will be
> ignored. bad permissions: ignore key:
> /c/Users/Ben/.ssh/id_rsa Permission
> denied (publickey). fatal: The remote
> end hung up unexpectedly

Isso é usando o .ssh pasta no meu c:\users\ben\ pasta, que é o que é usado por msysgit. Eu suspeito que o cygwin funciona porque as .ssh pasta está localizada em outro lugar, mas eu não sei por que

No Git Bash, eu verifique as permissões:

$ ls -l -a ~/.ssh

O que me dá:

drwxr-xr-x    2 Ben      Administ        0 Oct 12 13:09 .    
drwxr-xr-x   34 Ben      Administ     8192 Oct 12 13:15 ..    
-rw-r--r--    1 Ben      Administ     1743 Oct 12 12:36 id_rsa
-rw-r--r--    1 Ben      Administ      399 Oct 12 12:36 id_rsa.pub    
-rw-r--r--    1 Ben      Administ      407 Oct 12 13:09 known_hosts

Essas permissões são, aparentemente, muito descontraído.Como eles conseguiram, eu não tenho nenhuma idéia.

Eu posso tentar mudar...

$ chmod -v -R 600 ~/.ssh

o que me diz:

mode of `.ssh' changed to 0600 (rw-------)
mode of `.ssh/id_rsa' changed to 0600 (rw-------)
mode of `.ssh/id_rsa.pub' changed to 0600 (rw-------)
mode of `.ssh/known_hosts' changed to 0600 (rw-------)

Mas parece não ter nenhum efeito.Eu ainda tenho o mesmo erro, e fazendo

$ ls -l -a ~/.ssh

produz as mesmas permissões como antes.

ATUALIZAÇÃO:

Eu tentei corrigir as permissões para esses arquivos no cygwin, e o cygwin relatórios de suas permissões corretamente, gitbash não:alt texto http://cdn.cloudfiles.mosso.com/c54102/app7962031255448924.jpg

Alguma idéia de como eu realmente pode corrigir essas permissões?

Foi útil?

Solução

Você mudou as permissões em todo o diretório, que eu concordo com Splash é uma má ideia. Se você se lembra quais são as permissões originais para o diretório, eu tentaria colocá -las de volta para isso e depois fazer o seguinte

cd ~/.ssh
chmod 700 id_rsa

Dentro da pasta .ssh. Isso definirá o arquivo ID_RSA como RWX (leia, escreva, execute) apenas para o proprietário (você) e o acesso zero para todos os outros.

Se você não consegue se lembrar quais são as configurações originais, adicione um novo usuário e crie um conjunto de teclas SSH para esse usuário, criando assim uma nova pasta .ssh que terá permissões padrão. Você pode usar essa nova pasta .ssh como referência para as permissões para redefinir sua pasta .ssh e arquivos para.

Se isso não funcionar, eu tentaria fazer uma desinstalação do msysgit, excluindo todas as pastas .ssh no computador (apenas para medida segura) e depois reinstalando o mSysgit com as configurações desejadas e tente começar de novo (embora eu acho que você me disse você já tentou isso).

Editado: Acabei de encontrar este link via Google - Corrigindo "Aviso: arquivo de chave privada desprotegida!" no Linux Embora seja direcionado para o Linux, pode ajudar, pois estamos falando de permissões LIunx e coisas do tipo.

Outras dicas

Há um bug no CHMOD de Cygwin, consulte:

https://superuser.com/questions/397288/using-cygwin-in-windows-8-chmod-600-does-not-work-as-espete

chgrp -Rv Users ~/.ssh/* 
chmod -vR 600 ~/.ssh/id_rsa

Para sistemas *nix, a correção é óbvio chmod 600 id_rsa ofc, mas no windows 7 eu tive que bater minha cabeça contra a parede por um tempo, mas então eu encontrei a solução mágica:

vá em Meu Computador / Clique botão Direito / Propriedades / Configurações Avançadas do Sistema / Variáveis de Ambiente e APAGAR a variável (possivelmente do sistema e o ambiente do utilizador):

O CYGWIN

Basicamente, é uma falha no mingw32 usado pelo git binários do windows, vendo todos os arquivos 644 e pastas 755 sempre.Retirar a variável de ambiente não mudar esse comportamento, mas ele diz appearantly ssh.exe para ignorar o problema.Se você definir permissões adequadas para o seu id_rsa através de exploradores definições de segurança (não há realmente nenhuma necessidade de qualquer outro usuário, em que o seu próprio, e não "todos", e não "administradores", e não "sistema".nenhum.só você), você ainda vai ser seguro.

Agora, por que mingw32, um sistema diferente do que o cygwin, gostaria de fazer qualquer o uso do CYGWIN variável de ambiente, está além de mim.Parece um bug para mim.

Estou no XP e isso permitiu que o Git Bash se comunicasse com Github (depois de muita frustração):

  1. cópia de c:\cygwin\bin\cyg* (~ 50 arquivos) para c:\Program Files\Git\bin\
  2. cópia de c:\cygwin\bin\ssh.exe para c:\Program Files\Git\bin\ (Substituição)
  3. Crie o arquivo c:\Documents and Settings\<username>\.ssh\config contendo:

    Host github.com
        User git
        Hostname github.com
        PreferredAuthentications publickey
        IdentityFile "/cygdrive/c/Documents and Settings/<username>/.ssh/id_rsa"
    
  4. (opcional) Use ssh -v git@github Para ver a conexão depurada.

  5. Experimente um empurrão!

Antecedentes: O problema geral é uma combinação desses dois:

  • Bug: Mingw32 vê todos os arquivos como 644 (outros/legíveis em grupo), e nada que eu tentei no Mingw32, Cygwin ou Windows pudesse corrigi-lo.
  • A versão SSH do Mingw32 não permitirá isso para chaves privadas (geralmente uma boa política em um servidor).

Para o Windows 7 usando o git encontrado aqui (usa Mingw, não Cygwin):

  1. No Windows Explorer, clique com o botão direito do mouse no seu arquivo id_rsa e selecione Propriedades
  2. Selecione a guia de segurança e clique em Editar ...
  3. Verifique a caixa de nega ao lado de controle total para todos os grupos, exceto administradores
  4. Represente seu comando git

Alterar as permissões de arquivos das propriedades, desativar a herança e executar o CHMOD 400 não funcionou para mim. As permissões para o meu arquivo de chave privada foram:

-r-r ----- 1 Alex Nenhum 1766 Mar 8 13:04 /home/alex/.ssh/id_rsa

Então eu notei que o grupo não era, então eu apenas corri

Chown Alex: Administradores ~/.ssh/id_rsa

Então eu poderia alterar com sucesso as permissões com o CHMOD 400 e executar um empurrão git.

Para usuários de Mac:

Altere as configurações do seu arquivo de pares de chaves digitando isso no terminal:

chmod og-r *filename.pem*

(verifique se você está no diretório correto ou no nome do caminho do comando corretamente).

Ok, então aqui está como eu forcei a mudança nos meus arquivos do Windows sobre as próprias permissões no Win7: Encontre sua chave SSH no Windows Explorer: C: Users [your_user_name_here] .ssh id_rsa

Clique com o botão direito do mouse em arquivo> Propriedades> Guia de segurança> Botão avançado> Alterar permissões

Agora remova todos que não são o seu nome de usuário. Isso inclui usuários de administrador e sistema. Neste ponto, você pode obter um diálogo sobre herdar permissões- escolha a opção que não herda- já que queremos alterar esse arquivo.

Clique em OK e salve até terminar.

Eu lutei com isso por dias porque minhas janelas não alterariam as permissões de arquivo da linha de comando. Dessa forma, ele também é feito- em vez de usar trabalhos emocionantes que produzem pode ter consequências estranhas.

Eu resolvo correndo:

chmod 400 ~/.ssh/id_rsa

Espero ajudar. Boa sorte.

Depois de participar do problema recentemente e este é um dos principais resultados do Google, pensei em entrar com um simples trabalho documentado em discussão aqui: http://code.google.com/p/msysgit/issues/detail?id=261#c40

Simplesmente envolve substituir o mysys ssh.exe com seu cygwin ssh.exe

Eu tive o mesmo problema no Windows XP recentemente. Tentei Chmod 700 no meu arquivo ~/.ssh/id_rsa, mas ele não parecia funcionar. Quando dei uma olhada nas permissões usando LS -l no ~/.ssh/id_rsa, pude ver que minhas permissões efetivas ainda era 644.

Lembrei -me de que as permissões do Windows também herdam permissões das pastas e a pasta ainda estava aberta a todos. Uma solução pode ser definir permissões para a pasta também, mas acho que uma maneira melhor seria dizer ao sistema para ignorar a herança deste arquivo. Isso pode ser feito usando a opção avançada na guia de segurança nas propriedades do arquivo e desmarcando "herdar das permissões dos pais ..."

Isso pode ser útil para outras pessoas com o mesmo problema.

Estou jogando agora com o Git 1.6.5 e não consigo replicar sua configuração:

Administrator@WS2008 /k/git
$ ll ~/.ssh
total 8
drwxr-xr-x    2 Administ Administ     4096 Oct 13 22:04 ./
drwxr-xr-x    6 Administ Administ     4096 Oct  6 21:36 ../
-rw-r--r--    1 Administ Administ        0 Oct 13 22:04 c.txt
-rw-r--r--    1 Administ Administ      403 Sep 30 22:36 config_disabled
-rw-r--r--    1 Administ Administ      887 Aug 30 16:33 id_rsa
-rw-r--r--    1 Administ Administ      226 Aug 30 16:34 id_rsa.pub
-rw-r--r--    1 Administ Administ      843 Aug 30 16:32 id_rsa_putty.ppk
-rw-r--r--    1 Administ Administ      294 Aug 30 16:33 id_rsa_putty.pub
-rw-r--r--    1 Administ Administ     1626 Sep 30 22:49 known_hosts

Administrator@WS2008 /k/git
$ git clone git@github.com:alexandrul/gitbook.git
Initialized empty Git repository in k:/git/gitbook/.git/
remote: Counting objects: 1152, done.
remote: Compressing objects: 100% (625/625), done.
remote: Total 1152 (delta 438), reused 1056 (delta 383)s
Receiving objects: 100% (1152/1152), 1.31 MiB | 78 KiB/s, done.
Resolving deltas: 100% (438/438), done.

Administrator@WS2008 /k/git
$ ssh git@github.com
ERROR: Hi alexandrul! You've successfully authenticated, but GitHub does not pro
vide shell access
Connection to github.com closed.

$ ssh -v
OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007

O CHMOD também não modifica as permissões de arquivo para minhas chaves.

Meio Ambiente:

  • Windows Server 2008 SP2 no NTFS
  • Usuário: Administrador
  • Ambiente Vars:
    • PLINK_PROTOCOL = SSH
    • Home =/C/Perfis/Home

Atualizar: Git 1.6.5.1 também funciona.

Este é um ponto particularmente envolvidos problema no Windows, onde não basta apenas chmod os arquivos corretamente.Você precisa configurar seu ambiente.

No Windows, isso funcionou para mim:

  1. Instalar o cygwin.

  2. Substitua o msysgit ssh.exe com o cygwin do ssh.exe.

  3. Utilizando o cygwin bash, chmod 600 o arquivo de chave privada, que foi "id_rsa" para mim.

  4. Se ainda não funcionar, vá para Painel de Controle -> Propriedades do Sistema -> Avançado -> Variáveis de Ambiente e adicione a seguinte variável de ambiente.Em seguida, repita o passo 3.

    Valor Da Variável
    O CYGWIN sbmntsec

Consegui consertar isso fazendo duas coisas, embora você não precise fazer a Etapa 1.

  1. cópia de cygwin ssh.exe e todo o cyg*.dll no diretório de bin do git (isso pode não ser necessário, mas é um passo que eu dei, mas isso por si só não consertou as coisas)

  2. Siga as etapas de: http://zylstra.wordpress.com/2008/08/29/overcome-herokus-permission-denied-publickey-problem/

    Eu adicionei alguns detalhes ao meu arquivo ~/.ssh/config:

Host Heroku.com
HostName Heroku.com
Porta 22
Identities, sim, sim
Identityfile ~/.ssh/id_heroku
Tcpkeepalive Sim
Usuário Brandon

Eu tive que usar o usuário como meu endereço de e -mail para heroku.com Nota: Isso significa que você precisa criar uma chave, segui isso para criar a chave e, quando ele solicita o nome da chave, não deixe de especificar id_herokuhttp://help.github.com/win-set-up-git/

  1. Em seguida, adicione a chave:
    Heroku Keys: Adicionar ~/.ssh/id_heroku.pub

O que o truque para mim foi atualizar Cygwin Variável de ambiente com: "tty nodosfilewarning". Nem precisava chmod.

Não é uma resposta direta para a pergunta principal, mas sobre a sua pergunta sobre como a pasta de Cygwin funciona ... como uma regra geral, o Cygwin coloca todos os seus "seus" arquivos sob o equívoco de C: cygwin home nome de usuário. Ele trata essa pasta para qualquer configuração específica do usuário, em vez do diretório do usuário do Windows.

A menos que haja uma razão pela qual você queira manter esse par de chaves públicas/privadas (ID_RSA/ID_RSA.PUB) ou gostar de bater a cabeça na parede, eu recomendo recriá -los e atualizar sua chave pública no Github.

Comece fazendo uma cópia de backup do seu diretório ~/.ssh.

Digite o seguinte e responda "Y" se deseja escrever demais os arquivos existentes.

ssh-keygen -t rsa

Copie o conteúdo da chave pública para a sua área de transferência. (Abaixo está como você deve fazê -lo em um Mac).

cat ~/.ssh/id_rsa.pub | pbcopy

Vá para sua conta no Github e adicione esta chave.

Name: My new public key
Key: <PASTE>

Saia do seu terminal e reinicie um novo.

Se você receber mensagens de erro sem sentido como "Enter sua senha" para sua chave pública quando você nunca inseriu uma, considere essa técnica inicial. Como você vê acima, não é complicado.

Eu nunca consegui fazer Git funcionar completamente em PowerShell. Mas no Git Bash Shell, não tinha problemas relacionados à permissão e não precisei definir o CHMod etc ... depois de adicionar o SSH ao Github, eu estava em funcionamento.

Digite no terminal:

chmod -Rf 700 ~/.ssh/

E tente novamente.

Você copiou o arquivo -chave de outra máquina?

Acabei de criar um id_rsa Arquivo na máquina cliente e depois colou a chave que eu queria. Sem problemas de permissões. Nada para definir. Apenas funcionou. Ele também funciona se você usar o Puttygen para criar a chave privada.

Possivelmente, algum problema de grupo oculto se você estiver copiando de outra máquina.

Testado em duas máquinas Windows 8.1. Usando texto sublime 3 para copiar e colar a chave privada. Usando o Git Bash (Git-1.9.4-PREVIEW20140611).

Depois de atualizar minha instalação do Cygwin para uma versão por volta de fevereiro de 2015 (1.7.34(0.285/5/3) 2015-02-04 12:14 x86_64 Cygwin), De repente encontrei para o UNPROTECTED PRIVATE KEY FILE aviso.

Corrigi esse problema depois de executar o seguinte comando:

setfacl -s u::rw-,g::---,o:--- ~/.ssh/id_rsa

(outra resposta para outra pergunta dá mais contexto)

@A resposta de Koby não funciona para mim, então eu faço uma pequena mudança.

cd ~/.ssh
chmod 700 id_rsa.pub

Isso funciona bem para mim no Mac.

Eu tive o mesmo problema no Windows 10, onde eu tentei conectar via SSH em um Vagabundo caixa.Este parece ser um bug na antiga versão do OpenSSH.O que funcionou para mim:

  1. Instale o mais recente OpenSSH de http://www.mls-software.com/opensshd.html
  2. where.exe ssh

(Observe o ".exe" se você estiver usando o Powershell)

Você pode ver algo como:

C:\Windows\System32\OpenSSH\ssh.exe
C:\Program Files\OpenSSH\bin\ssh.exe
C:\opscode\chefdk\embedded\git\usr\bin\ssh.exe

Note que, no exemplo acima, o mais recente OpenSSH é segundo o caminho para ele não irá executar.

Para alterar a ordem:

  1. Clique com o botão direito do rato botão do Windows -> Configurações -> "Editar as Variáveis de Ambiente do Sistema"
  2. Em "Avançar" guia clique em "Variáveis de Ambiente..."
  3. Em Variáveis do Sistema editar "Caminho".
  4. Seleccione "C:\Program Files\OpenSSH\bin" e "Mover para Cima", para que apareça no topo.
  5. Clique em OK
  6. Reinicie o Console para que as novas variáveis de ambiente podem ser aplicadas.

Meu sistema está uma bagunça com Bash/Cygwin/Git/MSysgit/talvez-mais ...

chmod não teve efeito na chave, ou no config Arquivo.

Então eu decidi abordá -lo do Windows, que funcionou.

  1. Clique com o botão direito do mouse no arquivo cuja permissão precisa ser fixada.
  2. Selecione Properties.
  3. Selecione os Security aba.
  4. Clique Advanced perto do fundo.
  5. Clique Change, ao lado de Owner perto do topo.
  6. Digite "My-Awomome-Username" (obviamente altere isso para o seu nome de usuário atual do Windows) e clique Check Names, então OK.
  7. Debaixo Permission entries:, destaque cada usuário que não é "meu nome de USOMENTE" e selecione Remove. Repita isso até que "My-Awomome-Username" seja o único que resta.
  8. Selecione "My-Awome-Username" e clique Edit abaixo de.
  9. Verifique se o Type: no topo está definido como Allow, e depois marque a caixa de seleção ao lado de Full control.
  10. Acertar OK, Apply, OK, OK.

  11. Dê outra tentativa agora ...

Parece que às vezes o mock-bash não pode controlar a propriedade do arquivo. É especialmente estranho, pois é gerado a partir de um script de simulação. Vai saber.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top