Abordarei a criação de um repositório Git remoto usando o SSH num ambiente Linux.
Não incluirei detalhes da configuração do SSH.
É necessário que os seguintes pacotes estejam instalados: git, openssh-server e openssh-client.
Primeiro configure o SSH editando o arquivo /etc/ssh/sshd_config.
Eu recomendo algumas configurações[1]:
Protocol 2 # Permite apenas a versão 2 do protocolo (mais seguro)
PermitRootLogin no # Não permite login como root
PasswordAuthentication no # Não permite login por senha
Não esqueça de iniciar ou reiniciar o servidor SSH.
Agora é necessário criar um usuário para acesso ao Git através do SSH.
Eu recomendo que o nome do usuário seja git e que seja criado com o seguinte comando[2]:
useradd -r -m --shell /usr/bin/git-shell gitDefinindo o shell do usuário para /usr/bin/git-shell o acesso do usuário será restrito aos comandos do Git[3].
O diretório pessoal do usuário git será criado em /home/git.
Se você não tem uma chave para o SSH, crie-a com o comando ssh-keygen (usando seu usuário).
Será criada uma chave pública e privada em ~/.ssh, a chave pública tem o sufixo .pub (nunca compartilhe sua chave privada).
Agora é necessário adicionar sua chave pública a lista de chaves autorizadas do usuário git, para isso faça o seguinte:
mkdir /home/git/.ssh
cat /home/seu_usuario/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keysSupondo que o nome de sua chave pública seja id_rsa.pub.
Agora será necessário criar um repositório no diretório pessoal do usuário git.
Para criar um repositório para o projeto ProjetoTeste, faça o seguinte:
mkdir /home/git/ProjetoTeste
cd /home/git/ProjetoTeste
git init --bareAgora é necessário garantir que tudo pertença ao usuário git, faça o seguinte:
cd /home/git
chown -R git.git . # não esqueça do ponto no final
Isso é tudo.
Para clonar o repositório use o seguinte comando:
git clone git@ip_do_servidor:ProjetoTesteReferência:
1- http://linux.die.net/man/5/sshd_config ou man 5 sshd_config.
2- http://linux.die.net/man/8/useradd ou man 8 useradd.
3- http://linux.die.net/man/1/git-shell ou man 1 git-shell.