Utilisation d'un référentiel distant avec un port non standard

125

Je configure mon projet git local pour un référentiel distant. Le référentiel distant est servi sur un port non standard (4019).

Mais ça ne marche pas. Au lieu de cela, j'obtiens le message d'erreur suivant:

ssh: connect to host git.host.de:4019 port 22: Connection refused
fatal: The remote end hung up unexpectedly
error: failed to push to 'ssh://[email protected]:4019/var/cache/git/project.git'

Ma configuration git locale est la suivante :

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
[remote "origin"]
  url = ssh://[email protected]:4019/var/cache/git/project.git
  fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
  remote = origin
  merge = refs/heads/master

(Le port et l'hôte sont des espaces réservés pour le port et l'hôte réels.)

Quel est le problème avec ma configuration git?

brainfck
la source
8
On dirait que si vous ne mettez pas explicitement ssh://devant l'URL, cela pense que c'est un format différent. il en ssh://example.com:444/etc/est de même pour / etc / sur example.com via le port 44. Alors que example.com:444/etc/pour / 444 / etc / sur example.com via le port 22.
Kzqai
5
La remarque de @Kzqai est importante. c'est à dire si vous le faites git remote set-url origin [email protected]:443/yourname/yourrepo/ne fonctionnera pas. mais, si vous faites git remote set-url origin ssh://[email protected]:443/yourname/yourrepo/cela fonctionnera
chêne
Pour le Google-fu - j'ai eu ce problème avec phabricator quand je l'avais réglé sur un port non par défaut de 2222. Maintenant, trié!
user3791372

Réponses:

116

Si vous mettez quelque chose comme ça dans votre .ssh/config:

Host githost
HostName git.host.de
Port 4019
User root

alors vous devriez pouvoir utiliser la syntaxe de base:

git push githost:/var/cache/git/project.git master
CB Bailey
la source
4
Une configuration SSH pourrait être une solution de contournement, mais cela m'a intéressé, car man git-push dit que le format d'url ssh accepté est ssh: // [user @] host.xz [: port] /path/to/repo.git /
gnud
1
Je ne suis pas sûr, il peut s'agir d'un problème de configuration de version git / ssh car j'ai essayé de pousser vers une adresse ssh: // fake @ localhost: 333 / fausse et obtenu (comme prévu) "port 333: Connexion refusée".
CB Bailey
35
Attention à tous ceux qui en ont encore besoin. La syntaxe est git clone ssh://username@hostname:333/~/repopour un chemin relatif à votre répertoire personnel ou git clone ssh://username@hostname:333/path/to/repopour un chemin absolu
Brandon Wamboldt
sur une machine Windows: c: / windows / system32 / drivers / etc / hosts pour définir un nom d'hôte si nécessaire (par exemple, machines virtuelles / serveurs)
user3791372
Comment cela peut-il être fait si j'ai une adresse IP et non un nom d'hôte? Je demande parce que nous n'avons pas encore lié notre nom d'hôte à notre ip.
ThisIsNotAnId
130

La méthode d'accès git basée sur SSH peut être spécifiée en <repo_path>/.git/configutilisant une URL complète ou une syntaxe de type SCP, comme spécifié dans http://git-scm.com/docs/git-clone :

Style d'URL:

url = ssh://[user@]host.xz[:port]/path/to/repo.git/

Style SCP:

url = [user@]host.xz:path/to/repo.git/

Notez que le style SCP n'autorise pas un changement de port direct, s'appuyant plutôt sur une ssh_configdéfinition d'hôte dans votre ~/.ssh/configtel que:

Host my_git_host
HostName git.some.host.org
Port 24589
User not_a_root_user

Ensuite, vous pouvez tester dans un shell avec:

ssh my_git_host

et modifiez votre URI de style SCP <repo_path>/.git/configcomme suit :

url = my_git_host:path/to/repo.git/
jdpf
la source
1
Soooooo ... tout ce dont vous avez vraiment besoin est d'ajouter un ssh: // devant l'url, probablement.
Kzqai le
1
Je ne savais pas que vous pouviez spécifier les URL ssh ou que scp (par défaut) n'autorisait pas les numéros de port. Bon à savoir.
Powerlord
1
scp autorise en fait le numéro de port (mais la clé d'option doit être en majuscule P):scp -P 2020 file/to/copy user@host:path/to/copy/file/to
Tiré
1
Pour moi, il suffisait d'ajouter ssh://à mon url. Si le protocole est manquante, utilise le port par défaut git: 22. Je vous remercie.
Marek Podyma
28

Essaye ça

git clone ssh://[email protected]:11111/home/git/repo.git
Ricky
la source
1
Salut Ricky, cela a fonctionné pour moi avec la syntaxe git clone ssh: // user @ machine: port / path-to-repo, où vous écrivez la machine doit être utilisateur, merci
rtrujillor
9

Cela évite votre problème plutôt que de le résoudre directement, mais je vous recommande d'ajouter un ~/.ssh/configfichier et d'avoir quelque chose comme ça

Host git_host
HostName git.host.de
User root
Port 4019

alors tu peux avoir

url = git_host:/var/cache/git/project.git

et vous pouvez aussi ssh git_hostet scp git_host ...et tout fonctionnera.

Peter
la source
7

SSH n'utilise pas la :syntaxe lors de la spécification d'un port. Le moyen le plus simple de le faire est de modifier votre ~/.ssh/configfichier et d'ajouter:

Hôte git.host.de
  Port 4019

Puis spécifiez juste git.host.desans numéro de port.

Greg Hewgill
la source