Recentemente, fui incapaz de clonar ou enviar para o github e estou tentando encontrar a causa raiz.
Isso está no windows
Eu tenho o cygwin + git e o msysgit.
Msysgit foi instalado com as seguintes opções:
- OpenSSH
- Use o Git no prompt de comando do Windows
Isso me dá quatro ambientes para tentar usar o git:
- Prompt de cmd do Windows
- Powershell
- Git Bash
- Cygwin
De alguma forma, consegui me colocar em uma posição em que, quando tento clonar um repositório usando msysgit, cmd.exe ou 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 está usando a pasta .ssh na minha pasta c: \ users \ ben \, que é usada pelo msysgit. Suspeito que o cygwin funcione porque a pasta .ssh está localizada em outro lugar, mas não sei por que
No Git Bash, verifico 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 relaxadas. Como eles ficaram assim, não faço ideia.
Eu posso tentar mudá-los ...
$ 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 efeito. Eu ainda recebo o mesmo erro, e fazendo
$ ls -l -a ~/.ssh
produz as mesmas permissões de antes.
ATUALIZAR:
Tentei corrigir as permissões para esses arquivos no cygwin, e o cygwin reporta suas permissões corretamente, o gitbash não: texto alternativo http://cdn.cloudfiles.mosso.com/c54102/app7962031255448924.jpg
Alguma idéia de como posso realmente corrigir essas permissões?
Respostas:
Você alterou as permissões em todo o diretório, o que eu concordo com o Splash é uma má idéia. Se você se lembrar de quais são as permissões originais para o diretório, tentarei defini-las novamente e faça o seguinte
dentro da pasta .ssh. Isso definirá o arquivo id_rsa como rwx (leitura, gravação, execução) apenas para o proprietário (você) e zero acesso para todos os outros.
Se você não conseguir lembrar quais são as configurações originais, adicione um novo usuário e crie um conjunto de chaves 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 permissões para redefinir sua pasta e arquivos .ssh.
Se isso não funcionar, eu tentaria fazer uma desinstalação do msysgit, excluir TODAS as pastas .ssh no computador (apenas para uma medida segura), reinstalar o msysgit com as configurações desejadas e tentar reiniciar completamente (apesar de achar que você me disse você já tentou isso).
Editado: Também encontrei este link no Google - Correção "AVISO: ARQUIVO CHAVE PRIVADA NÃO PROTEGIDA!" no Linux Embora seja direcionado ao linux, pode ajudar, já que estamos falando de permissões liunx e outras coisas.
fonte
-rwx------
. Portanto, o que você está mostrando não está correto se você executou o comando chmod corretamente.Há um erro no chmod do cygwin, consulte:
/superuser/397288/using-cygwin-in-windows-8-chmod-600-does-not-work-as-expected
fonte
None
. (Suponho que este seja um procedimento padrão quando um grupo não foi definido explicitamente). Essa alteração em um grupo explícitoUsers
supostamente permitiu que o cygwin separasse as permissões e eu poderia finalmente definir 600 em vez de um 660 automático.chmod 600
git, eu reclamava que minhas permissões ainda estavam0660
. A correção da propriedade do grupo faz com que o chown seja aplicado corretamente.Para sistemas * nix, a solução óbvia é
chmod 600 id_rsa
ofc, mas no Windows 7 eu tive que bater minha cabeça contra a parede por um tempo, mas depois encontrei a solução mágica:vá para Meu computador / Clique com o botão direito / Propriedades / Configurações avançadas do sistema / Variáveis de ambiente e DELETE a variável (possivelmente do sistema e do ambiente do usuário):
CYGWIN
Basicamente, é uma falha no mingw32 usada pelo binário do git windows, vendo todos os arquivos 644 e todas as pastas 755 sempre. A remoção da variável de ambiente não altera esse comportamento, mas aparentemente diz ao ssh.exe para ignorar o problema. Se você definir permissões apropriadas para o seu id_rsa por meio das configurações de segurança dos exploradores (realmente não há necessidade de ter nenhum outro usuário além do seu, não "todos", "administradores", "sistema". Nenhum. Apenas você) , você ainda estará seguro.
Agora, por que o mingw32, um sistema diferente do cygwin, faria qualquer uso da variável de ambiente CYGWIN, está além de mim. Parece um bug para mim.
fonte
Estou no XP e isso permitiu ao Git Bash se comunicar com o Github (depois de muita frustração):
c:\cygwin\bin\cyg*
(~ 50 arquivos) parac:\Program Files\Git\bin\
c:\cygwin\bin\ssh.exe
parac:\Program Files\Git\bin\
(substituição)Crie o arquivo que
c:\Documents and Settings\<username>\.ssh\config
contém:(opcional) Use
ssh -v git@github
para ver a conexão depurada.Antecedentes: O problema geral é uma combinação desses dois:
fonte
c:\Documents and Settings\<username>\.ssh\config
desde que você tenha substituídoc:\Program Files\Git\bin\ssh.exe
comc:\cygwin\bin\ssh.exe
. Certo ?LogLevel DEBUG
ao arquivo .ssh \ config para obter a saída de depuração do processo ssh.exe iniciado pelo git.exe.Para o Windows 7 usando o Git encontrado aqui (ele usa MinGW, não Cygwin):
fonte
OK, aqui está como eu realmente forcei a alteração nos meus arquivos do Windows em relação às 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 Segurança> botão Avançado> Alterar permissões
Agora remova todos os que não são realmente o seu nome de usuário. Isso inclui usuários Administrador e Sistema. Nesse ponto, você pode ter um diálogo sobre a herança de permissões - escolha a opção que NÃO herda - já que queremos apenas alterar este arquivo.
Clique em OK e salve até terminar.
Eu briguei com isso por dias porque minhas janelas não alteravam as permissões de arquivo na linha de comando. Dessa forma, também é REALMENTE feito - em vez de usar soluções emocionantes que podem ter consequências estranhas.
fonte
Alterar as permissões de arquivo 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:
Então eu notei que o grupo era Nenhum, então eu apenas corri
Então eu poderia alterar com êxito as permissões com o chmod 400 e executar um git push.
fonte
PARA USUÁRIOS DE MAC:
Altere as configurações do seu arquivo de par de chaves digitando isto no terminal:
(verifique se você está no diretório correto ou no nome do arquivo do caminho no comando corretamente).
fonte
Eu resolvo executando:
Espero ajudar. Boa sorte.
fonte
Depois de me deparar com o problema recentemente e este ser um dos principais resultados do Google, pensei em incluir um trabalho simples documentado em discussão aqui: http://code.google.com/p/msysgit/issues/detail?id = 261 # c40
Simplesmente envolve sobrescrever o mysys ssh.exe com o cygwin ssh.exe
fonte
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 eram 644.
Lembrei-me de que as permissões do Windows também herdam as permissões das pastas, e a pasta ainda estava aberta a todos. Uma solução poderia ser definir permissões para a pasta também, mas acho que uma maneira melhor seria dizer ao sistema para ignorar a herança desse arquivo. Isso pode ser feito usando a opção avançada na guia segurança nas propriedades do arquivo e desmarcando "herdar das permissões pai ..."
Isso pode ser útil para outras pessoas com o mesmo problema.
fonte
Estou jogando agora com o Git 1.6.5 e não consigo replicar sua configuração:
O chmod também não modifica as permissões de arquivo para minhas chaves.
Meio Ambiente:
Atualização: O Git 1.6.5.1 também funciona.
fonte
Esse é um problema particularmente envolvido no Windows, onde não basta apenas chmod os arquivos corretamente. Você precisa configurar seu ambiente.
No Windows, isso funcionou para mim:
Instale o cygwin.
Substitua o msysgit ssh.exe pelo ssh.exe do cygwin.
Usando cygwin bash, chmod 600 o arquivo de chave privada, que era "id_rsa" para mim.
Se ainda assim 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 a etapa 3.
Valor variável
CYGWIN sbmntsec
fonte
Consegui consertar isso fazendo duas coisas, embora você não precise executar a etapa 1.
copiar do cygwin ssh.exe e de todos os cyg * .dll no diretório bin do Git (isso pode não ser necessário, mas é um passo que eu dei, mas isso não resolveu nada)
siga as etapas em: http://zylstra.wordpress.com/2008/08/29/overcome-herokus-permission-denied-publickey-problem/
Adicionei alguns detalhes ao meu arquivo ~ / .ssh / config:
Host heroku.com
Nome do host heroku.com
Porta 22
IdentitiesOnly sim
IdentityFile ~ / .ssh / id_heroku
TCPKeepAlive yes
Usuário brandon
Eu tive que usar o usuário como meu endereço de e-mail no heroku.com Nota: isso significa que você precisa criar uma chave, eu a segui para criar a chave e, quando ele solicitar o nome da chave, não deixe de especificar id_heroku http: / /help.github.com/win-set-up-git/
heroku keys: add ~ / .ssh / id_heroku.pub
fonte
O que fez o truque para mim foi atualizar a variável de ambiente CYGWIN com: " tty nodosfilewarning ". Nem precisava chmod a chave.
fonte
Não é uma resposta direta à pergunta principal, mas à sua pergunta sobre como a pasta do cygwin funciona ... Como regra geral, o cygwin coloca todos os arquivos "your" sob o equivalente a c: \ cygwin \ home \ username. Ele trata essa pasta para qualquer configuração específica do usuário, e não para o diretório de usuário do Windows.
fonte
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 aproveite para bater de cabeça na parede, recomendo apenas recriá-las 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 sobrescrever os arquivos existentes.
Copie o conteúdo da chave pública na sua área de transferência. (Abaixo está como você deve fazê-lo em um Mac).
Vá para sua conta no github e adicione essa chave.
Saia do seu terminal e reinicie um novo.
Se você receber mensagens de erro sem sentido como "Digite sua senha" para sua chave pública quando você nunca inseriu uma, considere esta técnica de novo. Como você vê acima, não é complicado.
fonte
Eu nunca consegui fazer o git funcionar completamente no Powershell. Mas no shell do git bash não tive nenhum problema relacionado à permissão e não precisei configurar o chmod etc ... Depois de adicionar o ssh ao Github, eu estava em funcionamento.
fonte
Digite no terminal:
E tente novamente.
fonte
Você copiou o arquivo de chave de outra máquina?
Acabei de criar um
id_rsa
arquivo na máquina cliente e colei a chave que eu queria. Sem problemas de permissão. Nada para definir. Apenas funcionou. Também funciona se você usar o PuTTYgen para criar a chave privada.Possivelmente algum problema de grupo oculto, se você o estiver copiando de outra máquina.
Testado em duas máquinas Windows 8.1. Usando o Sublime Text 3 para copiar e colar a chave privada. Usando o Git Bash (Git-1.9.4-preview20140611).
fonte
Depois de atualizar minha instalação do Cygwin para uma versão em fevereiro de 2015 (
1.7.34(0.285/5/3) 2015-02-04 12:14 x86_64 Cygwin
), repentinamente me deparei com oUNPROTECTED PRIVATE KEY FILE
aviso.Corrigi esse problema depois de executar o seguinte comando:
( outra resposta para outra pergunta fornece mais contexto)
fonte
A resposta do @ koby não funciona para mim, então faço uma pequena alteração.
Isso funciona bem para mim no Mac.
fonte
Eu tive o mesmo problema no Windows 10, onde tentei fazer o SSH em uma caixa do Vagrant. Isso parece um bug na versão antiga do OpenSSH. O que funcionou para mim:
(Observe o ".exe" se você estiver usando o Powershell)
Você pode ver algo como:
Observe que no exemplo acima, o OpenSSH mais recente é o segundo no caminho, portanto não será executado.
Para alterar a ordem:
fonte
Meu sistema está um pouco confuso com bash / cygwin / git / msysgit / talvez-mais ...
chmod
não teve efeito na chave ou noconfig
arquivo.Decidi abordá-lo no Windows, que funcionou.
Properties
.Security
guiaAdvanced
perto da parte inferior.Change
, próximo aoOwner
topo.Check Names
emOK
.Permission entries:
, destaque cada usuário que não seja "Meu nome de usuário impressionante" e selecioneRemove
. Repita isso até que "Meu nome de usuário impressionante" seja o único que resta.Edit
abaixo.Type:
parte superior está definida comoAllow
e marque a caixa de seleção ao lado deFull control
.Hit
OK
,Apply
,OK
,OK
.Experimente novamente 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 mock-bash. Vai saber.
fonte
Nenhuma das soluções alternativas sugeridas aqui (chmod / chgrp / setfacl / windows perms) funcionou para mim com o msys64 em uma VM corporativa do Windows 7. No final, resolvi o problema usando um agente ssh com a chave fornecida no stdin. Adicionando isso ao meu
.bash_profile
torna o padrão para o meu login:Agora eu posso fazer git push e pull com controles remotos ssh.
fonte