Permitindo acesso ao Mercurial, mas não permitindo SSH

4

Eu configurei um servidor Mercurial em uma máquina Linux e funciona bem. Os usuários podem, por exemplo, empurrar e puxar para ele usando algo como:

hg push ssh://...

Os usuários também podem usar o ssh no servidor.

Para alguns usuários, gostaria de restringir o acesso a eles. Eles só podem acessar o Mercurial.

Como eu faria isso?

    
por user66204 09.01.2011 / 22:20

4 respostas

3

O que você está perguntando é this . Isto é exatamente o que o Gitorious faz para o git - ele é executado através de uma entrada command= no arquivo de chaves ssh e assegura que somente as operações do git possam ser executadas usando a chave ssh. A questão ligada pergunta sobre o software semelhante ao Gitorious para o Mercurial. Não sendo um usuário do Mercurial, não posso comentar sobre a qualidade das respostas.

    
por 09.01.2011 / 23:47
1

Você pode modificar a diretiva /etc/security/access.conf para permitir que apenas usuários específicos façam login e não outros.

A linha seria parecida com essa, mas com seus grupos / usuários localizados:

-:ALL EXCEPT your_group your_user1 your_user2 :ALL

Ou, se você tiver um grupo específico, deseja colocar em grupo usuários / grupos específicos:

-: blacklist_group1 blacklist_user :ALL

Ou você pode permitir o acesso ssh via group no sshd.conf, mas o método access.conf é um pouco mais global. Isso deve permitir que seus usuários ainda acessem o host, mas não faça login.

Eric

    
por 10.01.2011 / 21:14
1

O Mercurial vem com um roteiro exatamente para isso! Use o script contrib/hg-ssh que fornecemos para restringir os comandos. O arquivo contém este cabeçalho para explicar como usá-lo:

To be used in ~/.ssh/authorized_keys with the command option, see sshd(8):

command="hg-ssh path/to/repo1 /path/to/repo2 ~/repo3 ~user/repo4" ssh-dss ...

(probably together with these other useful options: no-port-forwarding, no-X11-forwarding, no-agent-forwarding)

This allows pull/push over SSH from/to the repositories given as arguments. If all your repositories are subdirectories of a common directory, you can allow shorter paths with:

command="cd path/to/my/repositories && hg-ssh repo1 subdir/repo2"

You can use pattern matching of your normal shell, e.g.:

command="cd repos && hg-ssh user/thomas/* projects/{mercurial,foo}" 
    
por 24.12.2011 / 17:38
0

Isso deve ser possivelmente com as chaves ssh. Infelizmente, eu não tenho idéia exatamente o que você precisa colocar após a chave, você precisa descobrir o que hg push faz quando você faz o push. Por exemplo, com o rsync, você pode fazer algo como:

command="rsync --server -vlogDtpre.iL . /path/to/dir/",no-pty,no-agent-forwarding,no-port-forwarding ssh-dss Adslkjhdfslw.......rest_of_key

Coloque o acima em .ssh / authorized_keys2 e, em seguida, veja se você pode descobrir qual comando hg push está sendo executado e coloque-o no campo de comando.

É possível que hg push esteja apenas fazendo um scp, caso em que o shell scponly também pode fazer o trabalho.

Espero que isso indique você na direção certa.

    
por 09.01.2011 / 22:47