Conectando-se ao github usando a chave SSH gerada pelo PuTTY no Windows 7

20

Em uma instalação intocada do Windows 7 Enterprise, de outra forma:

  1. Instale o PuTTY 0.62
  2. Criar par de chaves públicas / privadas com puttygen.exe
  3. Adicione chave pública para colar no OpenSSH allowed_keys na conta do github
  4. Adicionar chave privada ao concurso
  5. Instale o msysgit 1.7.8 com as seguintes opções:
    • Use o Git no prompt de comando do Windows
    • Use Plink (Tortoise) apontado para corrigir plink.exe
  6. Verifique se a impressão digital do github foi adicionada ao know_hosts conectando-se ao github.com no PuTTY e aceitando a impressão digital
  7. Edite ~/.ssh/configpara ler:

    Host github.com
        User git
        Hostname github.com
        PreferredAuthentications publickey
        IdentityFile ~\.ssh\github.ppk
    

ssh -vvvT [email protected]dá: http://pastebin.com/Tu3Fc6nJ . Observe que estou sendo solicitada a frase secreta, apesar de ter sido carregada com sucesso no concurso.

Eu tentei: chmod 700 ~/.ssh; chmod 600 ~/.ssh/*de dentro do Git Bash, mas não houve efeito conforme verificado por ls -l.

Devo observar que eu tinha essa configuração exata trabalhando em uma instalação anterior do Windows 7. Tudo é idêntico, tanto quanto eu posso dizer.

O que funciona é gerar chaves no Git Bash. No entanto, não posso adicionar essas chaves ao concurso, o que é uma grande dor. De fato, parece que qualquer tentativa de usar chaves geradas pelo PuTTY não tem êxito.

Alguma idéia sobre o que está impedindo que isso funcione com base nos logs? Desde já, obrigado.

Radu
fonte
com -vt, por favor, menos nível de verbosidade
preguiçoso Badger

Respostas:

20

Você está confundindo dois programas totalmente separados: PuTTY e OpenSSH.

  • plinke Pageant fazem parte do PuTTY. O sshcomando faz parte do OpenSSH. Não está claro qual programa está sendo usado pelo Git; você precisa verificar a %GIT_SSH%variável de ambiente para isso.

  • Os programas usam protocolos de agente diferentes; O OpenSSH não pode usar o Pageant do PuTTY; ele tem o seu próprio ssh-agent(que infelizmente é um pouco complicado de usar no Windows).

  • PuTTY e plinkarmazene as configurações da sessão no registro, editáveis ​​na interface do PuTTY. Eles não usam nada ~/.ssh/; esse diretório é usado apenas pelo OpenSSH.

  • Os formatos de chave privada usados ​​pelo OpenSSH e PuTTY são diferentes; você não pode usar uma .ppkchave com o OpenSSH. Se você gerou a chave no PuTTYgen, precisará usar o comando "Exportar → OpenSSH".

    $ ssh -vvvT [email protected]
    OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
    ...
    debug2: key_type_from_name: unknown key type 'PuTTY-User-Key-File-2:'
    
gravidade
fonte
Estou ciente da diferença e, como indicado na postagem original, o git foi configurado para usar o plink quando instalado. Eu verifiquei que isso alterou a variável de ambiente apropriada para apontar para plink.exe. Eu gostaria de usar as chaves PuTTY (e isso funcionou no passado!) Com o git, e o fato de que ele não está funcionando apesar do uso do plink é estranho ...
Radu
Essencialmente, agora eu posso fazê-lo funcionar com chaves OpenSSH, mas não com chaves PuTTY. Eu tentei reinstalar o PuTTY e também gerar novas chaves. Isso não parece ser um problema. Alguma idéia do que poderia ser?
Radu
1
@ Radu: plinknão suporta o formato de chave OpenSSH. Se sua versão for, não é plinkvocê que está usando; é outra coisa.
grawity
1
@ Radu: Além disso, a postagem original indica o oposto de sua reivindicação. Primeiro, você gera uma chave com o PuTTYgen e a carrega no Pageant, mas depois configura o OpenSSH e reclama que " sshsolicita a frase secreta apesar de ter sido carregada no Pageant". Você está confundindo os dois programas.
grawity
Eu nunca disse que o plink suporta o OpenSSH - Git Bash, no entanto, pois, por padrão, ele usa o OpenSSH. Lendo de volta, você está correto, eu tenho confundido as coisas, pois, como você disse, ~/.ssh/confignão é usado pelo PuTTY. No entanto, gostaria de reiterar que o GIT_SSH está apontado para plink; no entanto, se eu modificar o arquivo de configuração ssh para o OpenSSH, as alterações serão refletidas no Git Bash ao tentar conectar-se ao github. Basicamente, acredito que a variável de ambiente GIT_SSH está sendo ignorada e suponho que seja algo específico para o meu sistema operacional. Vou experimentar uma nova imagem amanhã.
Radu
20

Reunimos um guia passo a passo para obter a configuração do Git para Windows usando o aplicativo Plink do PuTTY para autenticação SSH.

Siga abaixo:


Configuração

  1. Instale o putty.zip, que está disponível na página de download do PuTTY ou você pode fazer o download individualmente.

    • PuTTY: putty.exe (ou por FTP )

      O cliente SSH e Telnet em si.

    • Plink: plink.exe (ou por FTP )

      Uma interface de linha de comando para os back-ends PuTTY.

    • Pageant: pageant.exe (ou por FTP )

      Um agente de autenticação SSH para PuTTY, PSCP, PSFTP e Plink.

    • PuTTYgen: puttygen.exe (ou por FTP )

      Um utilitário de geração de chaves RSA e DSA.

  2. Gere chaves RSA e PPK

    1. Usando o Git Bash, use ssh-keygenpara gerar um par de chaves públicas / privadas RSA. Mais informações sobre como fazer isso podem ser encontradas no artigo oficial Gerando chaves SSH .
    2. No PuTTYgen, importe sua ~/.ssh/id_rsachave (privada) existente , via ConversionsImport key.
    3. Salve a chave importada usando o Save private keybotão como ~/.ssh/id_rsa.ppk.
    4. Agora você deve ter as seguintes chaves no seu ~/.sshdiretório:

      • id_rsa: Chave RSA privada (OpenSSH)
      • id_rsa.pub: Chave pública (OpenSSH) RSA
      • id_rsa.ppk: Chave privada (PuTTY)
  3. Instale o Git para Windows .

    Certifique-se de escolher o Plink.

    Configuração do Git

    Nota: Se você já instalou o Git, basta executar o instalador novamente e definir o Plink como seu aplicativo SSH padrão.

  4. Defina os caminhos do seu ambiente.

    1. No Painel de Controle , navegue até a exibição Sistema.
    2. Escolha Configurações avançadas do sistema .
    3. Na janela Propriedades do sistema , clique no ícone Avançado guia .
    4. Clique Environment variables… .
    5. Adicione as seguintes variáveis ​​do sistema (se ainda não estiverem definidas):

      • GIT_HOME: C:\Program Files\Git
      • GIT_SSH: C:\Program Files (x86)\PuTTY\plink.exe
    6. Anexe o diretório binário do Git ao caminho do sistema.

      • Path: %Path%;%GIT_HOME%\bin
  5. Abra o Pageant e carregue a chave ppk localizada em ~/.ssh/id_rsa.ppk .

    Nota: Após o início do Pageant, você pode clicar no ícone na bandeja do sistema localizada na barra de tarefas, ao lado da hora, à direita.

  6. Abra o Putty e conecte-se para testar sua conexão via SSH e adicione a chave do servidor como um host conhecido.

    Putty

    Exemplos de nomes de host:

  7. Inicie o Git Bash.

    Você deve poder empurrar e puxar do host remoto sem inserir uma senha a cada vez.


Atalho

Você pode colocar um atalho no diretório de inicialização para carregar automaticamente sua chave sempre que fizer login na sua conta do Windows.

Via Script de lote

Esta ideia foi inspirada por uma resposta a esta pergunta:

Superusuário: Como criar um atalho do CMD? .

REM |==================================================================|
REM | Pageant Autoload.bat                                             |
REM |                                                                  |
REM | This script creates a shortcut for auto-loading a PPK (key) in   |
REM | Pageant by writing a temporary VB script and executing it. The   |
REM | following information below is added to the shortcut.            |
REM |                                                                  |
REM | Filename  : Pageant Autoload                                     |
REM | Target    : pageant.exe                                          |
REM | Arguments : id_rsa.ppk                                           |
REM | Start in  : ~/.ssh                                               |
REM |==================================================================|
@echo off

REM |==================================================================|
REM | Global Values - Do not touch these!                              |
REM |==================================================================|
SET VBSCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
SET STARTUP_DIR=Microsoft\Windows\Start Menu\Programs\Startup
SET STARTUP_USER_DIR=%APPDATA%\%STARTUP_DIR%
SET STARTUP_ALL_USERS_DIR=%PROGRAMDATA%\%STARTUP_DIR% REM Alternative

REM |==================================================================|
REM | Shortcut Values - You can change these to whatever you want.     |
REM |==================================================================|
SET FILENAME=Pageant Autoload.lnk
SET TARGET=%PROGRAMFILES(x86)%\PuTTY\pageant.exe
SET ARGUMENTS=id_rsa.ppk
SET START_IN=%%USERPROFILE%%\.ssh
SET DESCRIPTION=Autoload PuTTY key with Pageant on startup (Ctrl+Alt+S)
SET HOTKEY=CTRL+ALT+S

REM |==================================================================|
REM | Write a new VB script, on the fly; execute and delete it.        |
REM |==================================================================|
ECHO Set oWS = WScript.CreateObject("WScript.Shell") >> %VBSCRIPT%
ECHO sLinkFile = "%STARTUP_USER_DIR%\%FILENAME%" >> %VBSCRIPT%
ECHO Set oLink = oWS.CreateShortcut(sLinkFile) >> %VBSCRIPT%
ECHO oLink.TargetPath = "%TARGET%" >> %VBSCRIPT%
ECHO oLink.Arguments = "%ARGUMENTS%" >> %VBSCRIPT%
ECHO oLink.WorkingDirectory = "%START_IN%" >> %VBSCRIPT%
ECHO oLink.Description = "%DESCRIPTION%"  >> %VBSCRIPT%
ECHO oLink.HotKey = "%HOTKEY%" >> %VBSCRIPT%
ECHO oLink.Save >> %VBSCRIPT%
CScript //Nologo %VBSCRIPT%
DEL %VBSCRIPT% /f /q

Via Windows Explorer

  1. Navegue para o diretório de inicialização no Windows Explorer.

    • O Startup/diretório do usuário (preferencial) está localizado em:

      %AppData%\Microsoft\Windows\Start Menu\Programs\Startup
      
    • O Startup/diretório Todos os usuários está localizado em:

      %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
      
  2. Clique com o botão direito do mouse dentro da pasta e selecione NewShortcut

  3. Na caixa de diálogo Criar atalho , insira as seguintes informações.

    • Localização: "C:\Program Files (x86)\PuTTY\pageant.exe"
    • Nome: Pageant Autoload
  4. Clique com o botão direito do mouse no novo atalho e escolha Propertiesno menu de contexto.

  5. Modifique os seguintes campos na guia Atalho :

    • Alvo: "%PROGRAMFILES(x86)%\PuTTY\pageant.exe" id_rsa.ppk
    • Começar: %USERPROFILE%\.ssh

     
    Notas:

    1. Se você estiver usando um sistema operacional Windows de 32 bits, use a %PROGRAMFILES%variável de ambiente em vez de %PROGRAMFILES(x86)%.

    2. Se você colocou o atalho no diretório de inicialização Todos os usuários, verifique se o usuário atual possui uma id_rsa.ppkchave no ~/.sshdiretório ou a chave não será carregada automaticamente.


Comentários finais

Lá está você. Na próxima vez que você fizer login no seu perfil do Windows, você será recebido com um prompt do Pageant para inserir a senha da sua chave. Se você não definiu uma senha para sua chave, ela deverá ser carregada automaticamente sem aviso prévio.

Se você não tiver certeza se a chave carregada, visualiza as chaves atuais no Pageant, selecionando Exibir chaves no menu de contexto do Pageant na bandeja do sistema.

Mr. Polywhirl
fonte
3
Ótimas instruções detalhadas! +1 de mim!
Pimp Juice IT
Importando a chave privada no puttygen era meu elo perdido
Saurabh Kumar
Teve que criar uma conexão no Putty para ativar a etapa no processo de instalação da imagem.
user46193
Fantástico! Eu tive um problema semelhante com o gitlab.com e isso resolveu o problema. Git estava usando massa de vidraceiro, enquanto a chave que eu carregava era a do OpenSSH. Obrigado!
Jgalak # 26/18
4

Em inglês simples

debug3: Não é um arquivo de chave RSA1 /c/Users/Radu/\.ssh\github.ppk.

debug2: key_type_from_name: tipo de chave desconhecido 'PuTTY-User-Key-File-2

Puttygen pode construir diferentes chaves, o Github quer SSH1-RSA (?, Eu uso chaves ssh2 com Pageant no github)

Adiciona

Veja também este post sobre depuração de problemas de concurso com o Github

>plink.exe -v -agent [email protected]
Looking up host "github.com"
Connecting to 207.97.227.239 port 22
Server version: SSH-2.0-OpenSSH_5.1p1 Debian-5github2
Using SSH protocol version 2
We claim version: SSH-2.0-PuTTY_Release_0.62
Doing Diffie-Hellman group exchange
Doing Diffie-Hellman key exchange with hash SHA-256
Host key fingerprint is:
ssh-rsa 2048 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Pageant is running. Requesting keys.
Pageant has 1 SSH-2 keys
Using username "git".
Trying Pageant key #0
Remote debug message: Forced command: gerve lazybadger
Remote debug message: Port forwarding disabled.
Remote debug message: X11 forwarding disabled.
Remote debug message: Agent forwarding disabled.
Remote debug message: Pty allocation disabled.
Authenticating with public key "github/lazybadger" from agent
Sending Pageant's response
Remote debug message: Forced command: gerve lazybadger
Remote debug message: Port forwarding disabled.
Remote debug message: X11 forwarding disabled.
Remote debug message: Agent forwarding disabled.
Remote debug message: Pty allocation disabled.
Access granted
Opened channel for session
Server refused to allocate pty
Started a shell/command
Hi lazybadger! You've successfully authenticated, but GitHub does not provide shell access.
Server sent command exit status 1
Disconnected: All channels closed
Lazy Badger
fonte
O SSH1 é obsoleto e possui inúmeras falhas de segurança. O Github não o usa.
grawity
Infelizmente, esse equivalente a 'ssh -T [email protected]' está ausente na documentação de instruções do github. Obrigado por postar.
Epu