Como fazer o CVS remoto através de múltiplas conexões SSH

1

Eu sei usar um repositório CVS remoto onde o acesso ao servidor remoto é através do SSH.

Aqui está o meu problema: o servidor CVS remoto, chamá-lo de "A" é acessível por SSH apenas a partir de computadores dentro da mesma sub-rede. Existe um computador "B" na sub-rede que tem SSH aberto para o mundo. (Não pergunte porque, eu não sou o administrador.) Eu posso SSH em "B", e depois de lá SSH em "A" onde o repositório CVS é.

Meu PC doméstico não está na mesma sub-rede que "A" e "B". É possível acessar o repositório CVS em "A" através de minhas conexões SSH entre meu PC doméstico e "B" e entre "B" e "A"?

  • Sem hospedagem de outro repositório CVS em "B".
  • E sem fazer check-out em "B" e sincronizar meu PC doméstico com esse check-out.
por Posco Grubb 25.11.2009 / 07:34

2 respostas

2

A resposta de Quack é um bom começo, mas tem dois problemas. Então eu vou tentar também:

Primeiro, você precisa criar um túnel da estação de trabalho local para a porta SSH da máquina A. Isso é feito facilmente a partir da linha de comando:

ssh -L 127.0.0.1:2200:A:22 B

(ssh para B e crie um túnel a partir da porta local 127.0.0.1:2200 até a porta remota A: 22)

Como o CVS não permite especificar portas ao usar o protocolo :ext , essa linha de comando simples não será boa o suficiente. O que você precisa fazer é criar ou modificar seu arquivo ~/.ssh/config :

Host B
   LocalForward 127.0.0.1:2200 A:22

Host tunnel2a
   Port 2200
   HostName 127.0.0.1

Estas são duas entradas. O primeiro diz ao ssh para criar um túnel sempre que você for ssh para B. O segundo define o novo 'hostname' tunnel2a que você pode usar para o cvs.

Primeiro, abra o túnel com ssh'ing para B:

ssh B

O CVS agora deve funcionar assim:

cvs -d :ext:username@tunnel2a:/cvsroot/ checkout someModule
    
por 25.11.2009 / 12:10
1

Você deve conseguir fazer isso por meio de tunelamento SSH. Eu não tenho 3 máquinas para testar, mas se eu entendi o processo certo, você quer 2 janelas de terminal.

No primeiro, SSH para "B" com esta opção: -L 1234:A:22 . Isto irá adicionar um túnel entre o localhost, na porta 1234, através da máquina "B", para a máquina "A", na porta 22 (a porta SSH).

O comando CVS que eu escrevi originalmente não funciona, já que o CVS não suporta portas no formato: ext: como eu escrevi. Se estiver usando um GUI IDE ou um cliente CVS, ele poderá permitir a entrada de uma porta alternativa diretamente. Se estiver fazendo isso com o cliente de linha de comando, você precisará de outra rota - incluindo um alias de host em seu arquivo ~/.ssh/config com a porta correta. A resposta de Manni é um ótimo exemplo de como isso é feito, então não vou reproduzir isso aqui.

Ao mirar a porta 1234 no localhost, você atingirá o túnel SSH e será roteado para a porta SSH em A.

Você pode querer verificar as respostas para < href="https://superuser.com/questions/49838/how-to-transfer-files-when-given-two-ssh-accounts"> algum perguntas relacionadas sobre tunelamento SSH. Obrigado Manni por me ajudar a bater essas instruções em forma.

No segundo terminal, execute seu comando de check-out do CVS, mas substitua localhost: 1234 por A:

cvs -d :ext:username@localhost:1234:/cvs checkout test
# instead of
# cvs -d :ext:username@A:/cvs checkout test

    
por 25.11.2009 / 07:58

Tags