SSH + comando svnserve -t, enquanto ainda permite acesso ao shell

1

Estou tendo problemas para configurar um servidor de hospedagem de site (por exemplo, website.com ) que tem apenas uma conta de usuário principal (ex. nome próprio ), para permitir o seguinte:

  • Os usuários me e friend aparecem como os nomes de usuários em entradas de log svn e
  • Os usuários me e amigo têm acesso ao shell via SSH

Portanto, eu configuro meu par de chaves privada / pública na minha máquina local ( laptop ) e copio a chave pública para website.com 's / home / ownername / arquivo .ssh / authorized_keys. Eu adicionei este argumento de comando à linha:

command="svnserve -t --tunnel-user=me -r /home/ownername/" ssh-rsa A...eQ== laptoplogin@laptop

Onde / home / ownername / svn / é a localização do repositório Subversion. Isso me permite usar:

[laptop]$ svn co svn+ssh://[email protected]/svn/ project

e todas as alterações que eu faço para projetar usando o Subversion me são listadas como o usuário nos comentários alterados, o que é ótimo.

No entanto, quando eu faço login via ssh:

  [laptop]$ ssh [email protected] 
  ( success ( 1 2 ( ANONYMOUS ) ...
  Connection closed.
  [laptop]$ 

Então, o que estou tentando fazer é possível? Eu honestamente não sei o suficiente sobre os túneis ssh para saber o que fazer. Existem inúmeros sites que discutem limitando ou removendo o acesso ao shell para clientes svn, mas é claro que eu quero o acesso ao shell, além de um nome de usuário personalizado para eu e amigo .

Qualquer ajuda é apreciada!

Solução:

Eu simplesmente configurei duas chaves id_rsa diferentes: id_rsa_shell e id_rsa_svn. Eu os adicionei ao arquivo .ssh / authorized_keys do servidor. Então, para a chave "shell", não coloco nenhum comando, e a tecla "svn", o svnserve com argumentos. Em seguida, no laptop, configurei o arquivo .ssh / config para ter duas entradas: website-shell e website-svn, cada uma com IdentityFile definida para apontar para as respectivas chaves. O ssh website-shell funcionou como esperado. Para o comando svn, em .subversion / config, sob [túneis] eu coloco:

website = ssh -p XXXX -i /home/emptyset/.ssh/id_rsa_svn

Agora, isso está funcionando:

$ svn co svn+website://website-svn/svn checkoutdirectory

Testando os commits verifiquei o argumento svnserve --tunnel-user trabalhado para colocar meu alias no svn commit. Observe que o alias site-svn é definido em .ssh / config.

Doce. :)

    
por emptyset 02.11.2009 / 20:21

1 resposta

3

Eu queria comentar sobre isso ontem, mas recuei à espera de alguém mais experiente nessa configuração específica. Trabalhando a partir do que você disse, você pode configurar vários usuários na mesma conta com chaves separadas, cada configuração para uma estrutura de comando diferente. Eu, o usuário Bob teria uma chave comando="svnserve -t --tunnel-user = Bob -r / home / nome_do_usuário /" ssh-rsa A ... eQ == laptoplogin @ laptop

e Jane seriam command="svnserve -t --tunnel-user = Jane -r / home / ownername /" ssh-rsa alguma outra..eQ == laptoplogin @ laptop

Agora, pela mesma lógica, você pode configurar uma terceira chave compartilhada entre você que apenas executa o bash ou compartilha a senha da conta para efetuar login sem o ssh sem chave e ter acesso ao shell.

Dito isso, você pode apenas dar uma olhada no Mercurial ou no Git, ambos tornando o desenvolvimento hospedado centralmente em um repositório simples e muito mais poderoso e flexível que o svn.

    
por 03.11.2009 / 15:12