Acessando um repositório mercurial remoto através de um proxy ssh em windows com tortoisehg

2

Eu tenho um repositório mercurial remoto (gerenciado pelo hg-gateway) em um servidor. O acesso a esse servidor não está aberto ao público em geral; no entanto, o firewall permite o proxy ssh.

Como configuro um cliente windows para acessar esse repositório com o tortoisehg?

Observe que é diferente de isso , como nessa pergunta não há proxy envolvido. Eu estou procurando o equivalente do Windows

Host remote-dev
    user mercurialuser
    ProxyCommand ssh -q firewalluser@firewall

para acessar um repo mercurial como

hg clone ssh://remote-dev/repo

Encontrei uma solução de trabalho e postarei abaixo nas respostas para o benefício da comunidade.

    
por lorenzog 07.05.2012 / 20:36

1 resposta

4

As suposições de administração do sistema estão no final deste post.

  1. download & instale putty, plink, pageant e puttygen em aqui
  2. se você não tiver uma chave ssh, inicie o puttygen e:
    1. se já tiver uma chave gerada pelo Linux:
      1. selecione "carregar um arquivo de chave privada existente"
      2. selecione o arquivo apropriado (deve alterar o filtro de extensão de arquivo)
      3. insira a frase secreta
      4. selecione "salvar chave privada"
    2. mais,
      1. selecione "gerar chave"
      2. mova o mouse aleatoriamente
      3. selecione "salvar chave privada"
      4. selecione "salvar chave pública"
  3. envie seu sysadmin a CHAVE PÚBLICA e não a chave privada! (sysadmins: leia abaixo)
  4. execute um prompt de comando do Windows (inicie > execute e digite 'cmd') e inicie o 'pageant.exe'
  5. clique com o botão direito do mouse no ícone na barra de ícones, "adicionar chave"
  6. selecione sua chave particular que você salvou antes, insira a frase secreta
  7. massa de lançamento

    1. no hostname put: o endereço IP do seu servidor de repositório
    2. salva a sessão como ' remote-dev ' (qualquer nome está ok)
    3. vá para conexão > proxy
    4. selecione "local" para o tipo de proxy
    5. nome do host do proxy: sua entrada DNS ou endereço IP do firewall
    6. porta: 22 (ou o que for apropriado para o ssh no firewall)
    7. nome de usuário: hg (ou qualquer usuário no firewall tem sua chave ssh pública em .ssh / authorized_files)
    8. em 'comando telnet ou proxy local' substitua o conteúdo por ' FULLPATH\plink.exe -v -nc %host:%port %user@%proxyhost ' (observe use o caminho COMPLETO do executável plink.exe. como c: \ plink.exe)
    9. vá para conexão > dados
    10. login automático nome de usuário: hg (ou qualquer usuário no servidor de repositório que tenha o hg-gateway em execução)
    11. voltar para 'sessão'
    12. clique em "salvar" para salvar a sessão
    13. clique em "abrir"
    14. você deve ver algo como

      Using username "hg".
      Authenticating with public key "imported-openssh-key" from agent
      Welcome to XXX code repository server!
      Your SSH access is restricted by hg-gateway.
      Summary of repos you have access to:
      
  8. faça agora o download & instalar o tortoisehg

  9. inicie o ambiente de trabalho do tortoisehg
  10. arquivo > repositório clone
  11. source: ssh: // remote-dev / repo-name (o remote-dev precisa corresponder ao que você chamou de sua sessão no putty!)
  12. destino: escolha seu destino local
  13. clique em "clone"
  14. é isso.

Para permitir que um usuário acesse o repositório remoto:

  1. adicione a chave ssh pública a .ssh/authorized_keys do usuário hg no firewall
  2. use hg-gateway para adicionar a chave desse usuário ao usuário hg no servidor

Uma nota: o putty tende a gerar chaves no formato .ppk; eles precisam ser convertidos em uma chave ssh de uma linha. O Google é seu amigo aqui.

Suposições:

  1. no firewall há um usuário chamado ' hg ', cujo arquivo .ssh/autorhized_keys contém as chaves públicas de todos os usuários que devem acessar o repositório
  2. o arquivo / etc / ssh / sshd_config do firewall contém uma linha similar a:

    Match Group dev
        ForceCommand nc -q0 reposerver_ip 22
    

    para que o usuário NÃO possa especificar a quais hosts se conectar. O usuário ' hg ' obviamente pertence ao grupo unix ' dev '.

por 07.05.2012 / 20:54