Git na porta SSH personalizada

149

Meu provedor VPS recomenda que eu deixe minha porta SSH no número da porta personalizada que eles atribuem por padrão (não 22). O problema é que, embora eu saiba que posso dar o número da porta ao criar uma configuração remota, parece que não posso fazer o mesmo ao fazer um clone do git. Estou usando o gitolite, então clono os comandos:

git clone [email protected]:gitolite-admin

Existe uma maneira de ocultar isso usando o número da porta ssh personalizada?

Também devo mencionar que estou executando o cygwin no Windows. Já vi vários lugares dizendo para adicionar a porta personalizada ao ~/.ssh/configarquivo, como

Host mydomain.com
    Port 12345

no entanto, no cygwin, esse arquivo parece não existir.

ryanzec
fonte
8
O nome do caminho do arquivo está .ssh/config(não conf) no diretório inicial do usuário. Não é necessário para a operação básica e, portanto, não existe por padrão. Você terá que criá-lo. Tente vim ~/.ssh/config(ou use o seu editor de texto preferido e instalado) para abri-lo / criá-lo.
Chris Johnsen
No Windows para ler, /Users/USERX/.ssh/configvocê precisa definir seu HOMEambiente local como /Users/USERX.
kenorb

Respostas:

327
git clone ssh://[email protected]:[port]/gitolite-admin

Observe que o número da porta deve estar lá sem colchetes: []

Christo
fonte
Isto funciona no entanto correção Chris Johnsen permite uma url limpa quando se utiliza números de porta personalizados
ryanzec
6
:-) Se você me perguntar, a sintaxe URL git é imundo, e o acima é mais normalizada
Christo
Admito que a sintaxe que você forneceu é mais descritiva, mas ter que lembrar de adicionar o número da porta personalizada é irritante. Configurar esse número de porta e depois não ter que lembrar que é um pouco mais fácil, mas a cada um o seu próprio (é por isso que pode ser feito em ambos os sentidos) :)
ryanzec
48
Observe que não funcionará se você remover o protocolo. ou seja, se você tentar o seguinte, não funcionará. git clone [email protected]:[port]/gitolite-admin
Bijay Rungta
1
no Windows com plink, a sintaxe de trabalho parece sergit clone ssh://[email protected]:port/home/user/gitolite-admin
Roman Plášil
18

As respostas acima são ótimas e ótimas, mas não claras para novos usuários do Git como eu. Então, depois de alguma investigação, ofereço esta nova resposta.

1 qual é o problema com o caminho do arquivo de configuração ssh?

Quando o arquivo de configuração não existe, você pode criar um. Além portdo arquivo de configuração, pode incluir outra opção de configuração ssh: user IdentityFilee assim por diante, o arquivo de configuração se parece com

Host mydomain.com
    User git
    Port 12345

Se você estiver executando o Linux, verifique se o arquivo de configuração deve ter permissão estrita: leitura / gravação para o usuário e não acessível por outros

2 e o caminho do ssh url?

É legal, a única coisa que devemos saber é que existem duas sintaxes para ssh url no git

  • sintaxe padrão ssh://[user@]host.xz[:port]/path/to/repo.git/
  • scp como sintaxe [user@]host.xz:path/to/repo.git/

Por padrão, o Gitlab e o Github mostrarão o scp como URL de sintaxe , e não podemos fornecer a porta ssh personalizada. Então, para mudar a porta ssh, precisamos usar a sintaxe padrão

Jim Green
fonte
14

Quando você deseja um caminho relativo do diretório inicial (em qualquer UNIX), usa esta sintaxe estranha:

ssh://[user@]host.xz[:port]/~[user]/path/to/repo

Por exemplo, se o repo está em /home/jack/projects/jillwebno servidor jill.come você está entrando como jackcom sshdescutando na porta 4242:

ssh://[email protected]:4242/~/projects/jillweb

E ao fazer login como jill(presumindo que você tenha permissões de arquivo):

ssh://[email protected]:4242/~jack/projects/jillweb

Daniel Santos
fonte
cara, isso ficou perplexo por um tempo e era exatamente o que eu precisava saber. você sabe onde isso está documentado?
Shaun Wilson
@ Shaun Wilson Desculpe, não me lembro bem. Mas demorei um pouco para encontrar a resposta, então achei que deveria compartilhá-la aqui, pois esse era um dos meus becos sem saída.
Daniel Santos
1
Obrigado! Especialmente se você estiver em um plano de hospedagem compartilhada, a parte ~ [usuário] é importante. Isso me ajudou a clonar meu repositório.
Jim Wilson
2
@ ShaunWilson, a especificação do caminho é um caminho UNIX padrão. Se você está logado em um sistema UNIX, o ~ é uma abreviação do diretório inicial; é útil economizar bastante digitação e, uma vez que o diretório inicial pode estar localizado em locais fora do padrão. O acima pode não funcionar em um servidor Windows.
Samuel Åslund
@Samuel Åslund Obrigado, atualizei minha resposta. Costumo esquecer o Windows porque ... bem, não pretendo ser brega, mas é horrível em comparação. No entanto, esta é uma distinção importante.
Daniel Santos
9

(Atualização: alguns anos depois, o Google e o Qwant "airlines" ainda me enviam aqui ao pesquisar por "porta ssh não padrão do git"). Uma maneira provavelmente melhor em versões mais recentes do git é usar o GIT_SSH_COMMAND ENV.VAR como:

GIT_SSH_COMMAND="ssh -oPort=1234 -i ~/.ssh/myPrivate_rsa.key" \ git clone myuser@myGitRemoteServer:/my/remote/git_repo/path

Isso tem a vantagem adicional de permitir qualquer outra opção adequada para ssh (porta, chave privada, IPv6, dispositivo PKCS # 11, ...).

earizon
fonte