Conectando ao servidor gitosis através de um túnel SSH
Pergunta
Eu tenho uma configuração de túnel SSH no meu macbook, assim ...
$ ssh -o ServerAliveInterval=3 -N -L 22222:gitosis-server:22 user@firewall.domain.com
Assim eu posso ssh para localhost: 22222 e vai acabar na gitosis-servidor por trás do firewall.
Eu criei um arquivo id_rsa.pub local, copiado no servidor de gitosis (executando CentOS5) e importou para gitosis usando ...
# sudo -H -u gitosis gitosis-initIt was successful as I can see the public key in /var/lib/gitosis/.ssh/authorized_keys.
Back on my macbook I setup a ~/.ssh/config file with the following...Host gitosis-server Hostname localhost HostKeyAlias gitosis-server.domain.com Port 22222So...I'm thinking this command should work...
$ git clone gitosis@gitosis-server:gitosis-admin.gitIt does not however as it comes up asking for a password....when the public keys should be working.
Initialized empty Git repository in /Users/USER/Development/gitrepo/gitosis-admin/.git/ gitosis@localhost's password:Any ideas on getting git working through to a gitosis server behind a firewall?
Thanks,
Matt
EDIT - Adding Debug From SSH Attempt
I did this command, 'ssh -vvv gitosis@gitosis-server'. I get some debugging back and it doesn't seem to like my Identity.
debug2: key: /Users/USER/.ssh/id_rsa.gitosis (0x1019b0) debug1: Authentications that can continue: publickey,gssapi-with-mic,password debug3: start over, passed a different list publickey,gssapi-with-mic,password debug3: preferred publickey,keyboard-interactive,password debug3: authmethod_lookup publickey debug3: remaining preferred: keyboard-interactive,password debug3: authmethod_is_enabled publickey debug1: Next authentication method: publickey debug1: Offering public key: /Users/USER/.ssh/id_rsa.gitosis debug3: send_pubkey_test debug2: we sent a publickey packet, wait for reply debug1: Authentications that can continue: publickey,gssapi-with-mic,password debug2: we did not send a packet, disable method debug3: authmethod_lookup password debug3: remaining preferred: ,password debug3: authmethod_is_enabled password debug1: Next authentication method: password gitosis@localhost's password:
EDIT 2
OK...Definately a bad key. I double checked all my keys again and of course found the gitosis-server was holding a bad key in the authorized_keys file.
debug1: userauth-request for user gitosis service ssh-connection method none debug1: attempt 0 failures 0 debug1: PAM: initializing for "gitosis" debug1: PAM: setting PAM_RHOST to "firewall.domain.com" debug1: PAM: setting PAM_TTY to "ssh" debug1: userauth-request for user gitosis service ssh-connection method publickey debug1: attempt 1 failures 1 debug1: test whether pkalg/pkblob are acceptable debug1: temporarily_use_uid: 102/103 (e=0/0) debug1: trying public key file /var/lib/gitosis/.ssh/authorized_keys debug1: restore_uid: 0/0 debug1: temporarily_use_uid: 102/103 (e=0/0) debug1: trying public key file /var/lib/gitosis/.ssh/authorized_keys2 debug1: restore_uid: 0/0 Failed publickey for gitosis from FIRE.WALL.IP.ADDRESS port 52453 ssh2
Eu levei um olhar mais atento ao arquivo authorized_keys no servidor gitosis .... e foi incorreto. Eu dobro verificado o arquivo de chave pública que eu tinha copiado para / tmp de minha estação de trabalho e foi o correto, mas diferente do que era em authorized_keys. Eu deletei o arquivo authorized_keys no servidor e reran o 'sudo -H -u gitosis gitosis-init
Eu atualizei-lo manualmente editando authorized_keys e adicionando a chave correta, e então eu tenho que trabalhar a partir de minha estação de trabalho através do túnel para uma ou duas tentativas. Em seguida, ele parou de trabalhar como antes. Voltei para o arquivo authorized_keys no servidor gitosis, e com certeza .... gitosis tinha revertido de volta para a chave antiga que não funciona.
Por que ele está fazendo isso .... voltando a uma chave pública ruim .... mesmo depois de eu tentei adicionar-lo com o comando acima ... que não conseguiu mudar isso .... em seguida, mudou-lo manualmente. ... que trabalhou, mas git então revertido para o mau novamente.
É como gitosis mantém lembrando-se da primeira chave I colocar lá .... e não deixe-me alterá-lo para a chave corrigido.
frustrante ...
Matt
Solução
Dar seguimento:
Eu não estou certo porque gitosis insistiu em reutilização de uma chave pública ruim. Tentando forçá-lo a tomar a chave correta não funcionou.
Então, hoje eu só removido e reinstalado o pacote gitosis na minha caixa de CentOS5.
yum remove gitosis rm -rf /var/lib/gitosis yum install gitosis sudo -H -u gitosis gitosis-init < /tmp/id_rsa.gitosis.pub #the correct key
No meu Mac, eu SSH túnel localhost: 22222 através do firewall para gitosis-servidor: 22.
$ ssh -o ServerAliveInterval=3 -N -L 22222:gitosis-server:22 user@firewall.domain.com
No meu Mac, eu criei ~ / .ssh / config parecida com esta ...
Host gitosis-server Hostname localhost IdentityFile ~/.ssh/id_rsa.gitosis HostKeyAlias gitosis-server.domain.com Port 22222
Então ... seguindo as instruções neste site ...
http: / /scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way
... tudo depois ... "Aqui um pouco de magia legal acontece Executar este em sua máquina local:." ... simplesmente funciona ... exceto lembre-se de substituir o "git" username com "gitosis".
Hope todas as bobagens que ajuda a alguém. Graças também para as sugestões que eu tenho aqui .... ele ajudou a reduzir o problema.
Matt
Outras dicas
Minha configuração para situação semelhante (de trabalho)
Eu tenho configuração similar para repo.or.cz (que é por alguma razão nulo rota bloqueada por ISP eu uso, polonês ISP Telekomunikacja SA (tpnet)), e ele funciona para mim:
eu execute o seguinte comando executado para configurar SSH tunel antes de tentar conectar: ??
$ autossh -M 20000 -f -N -L 2222:repo.or.cz:22 user@gateway.example.com
(eu uso autossh
vez de ssh
para reconectar se eu me desconectar, ou seja, para manter a conexão para cima). Verifique se identidades apropriados são adicionados ao agente de autenticação SSH:
$ ssh-add -l
2048 d7:d3:69:f5:0f:f9:5e:aa:e0:0b:28:c2:03:42:09:66 /home/user/.ssh/id_dsa_gateway.example.com (DSA)
1024 11:a2:29:fe:37:12:a7:33:c4:23:b0:e1:82:92:e0:6a /home/user/.ssh/id_dsa_repo.or.cz (DSA)
Eu uso chaveiro ter que fornecer senhas para minhas chaves SSH privadas apenas uma vez , no início da sessão.
Eu tenho o seguinte configurado na minha ~/.ssh/config
:
Host repo.or.cz # NoHostAuthenticationForLocalhost yes HostName localhost Port 2222
Esta configuração funciona para mim sem problemas.
Depuração sua situação
Como para depurar sua situação?
Em primeiro lugar, gostaria de verificar se eu posso fazer login para Gateway usando "ssh user@firewall.domain.com", para verificar se túnel SSH pode ser configurado. Se você estiver em Linux você pode usar por exemplo netstat --tcp
para verificar se há conexão estabelecida para porta de entrada; em outros sistemas operacionais e ambientes pode encontrar utilidades semelhantes.
Verifique se você pode se conectar corretamente para gitosis. (Se bem me lembro Gitorious está usando gitosis para gerenciar o acesso via SSH, então eu usei resposta do Gitorious no exemplo abaixo)
$ ssh gitosis@gitosis-server Need SSH_ORIGINAL_COMMAND Connection to closed.
Se ele não fazer algo semelhante ao anterior (repo.or.cz retornos "fatal:? O que você acha que eu sou um shell"!, GitHub retornos "user Hi Você autenticado com êxito, mas GitHub faz não fornecer acesso shell "), verificar onde ele falha com "ssh -v gitosis @ gitosis-server":.
$ ssh -v gitosis@gitosis-server [...] debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Offering public key: /home/user/.ssh/id_dsa_gitosis-server debug1: Remote: Forced command: gitosis-server user [...] debug1: Authentication succeeded (publickey)
Esta é uma questão ssh
e não (ainda) uma questão git
.
ssh -v
é seu amigo como ele vai te dar informações de depuração sobre o que os métodos de autenticação e chaves ssh
está tentando usar.
vezes Nove em cada dez Eu acho que este é um problema com permissões em arquivos de chave. ssh
gosta de seu diretório .ssh
e seu arquivo id_rsa
ser apenas graváveis ??por 'user' e meu umask permite que arquivos graváveis ??grupo por padrão. ssh -v
vai dizer se este é o caso em sua situação.
Editar
Ele se parece com o servidor sshd não aceita sua identidade. Eu não sei se você tem acesso ao servidor remoto, mas executando um servidor sshd
na depuração modo pode ajudar.
Running algo como isto permite uma conexão na porta dada (para que ele não interrompe o serviço sshd
normal) e saídas de informações de depuração. Isso pode ajudar a depurar porque o servidor não gosta de sua identidade.
sshd -d -p 2022
Se suas corridas 'normais' do serviço sshd com parâmetros extras certifique-se de fornecer estes para a versão de depuração também.
Você diz que pode ssh para localhost:2222
com sucesso. Para verificar se você configurou ~/.ssh/config
corretamente, você pode ssh para apenas gitosis-server
?
ssh gitosis-server
Eu tive um problema semelhante e eu resolvi-lo com:
[srydberg@zeus ~]$ echo $SSH_AUTH_SOCK
/tmp/keyring-KXX3Aw/ssh
[srydberg@zeus tmp]$ sudo rm -rf keyring-KXX3Aw/
Talvez suas chaves foram armazenadas em cache lá?