Git sur le port SSH personnalisé

149

Mon fournisseur VPS recommande que je laisse mon port SSH au numéro de port personnalisé qu'ils lui attribuent par défaut (pas 22). Le problème est que, même si je sais que je peux donner le numéro de port lors de la création d'une configuration distante, il semble que je ne puisse pas faire la même chose lorsque je fais un clone git. J'utilise gitolite donc je cloné les commandes ressemblent à:

git clone [email protected]:gitolite-admin

Existe-t-il un moyen de convertir cela en utilisant le numéro de port ssh personnalisé?

Je devrais également mentionner que j'exécute cygwin sous Windows. J'ai vu plusieurs endroits disant d'ajouter le port personnalisé au ~/.ssh/configfichier comme

Host mydomain.com
    Port 12345

cependant dans cygwin, ce fichier ne semble pas exister.

Ryanzec
la source
8
Le chemin du fichier est .ssh/config(pas conf) dans le répertoire personnel de votre utilisateur. Il n'est pas nécessaire pour le fonctionnement de base et n'existe donc pas par défaut. Vous devrez le créer. Essayez vim ~/.ssh/config(ou utilisez votre éditeur de texte préféré et installé) pour l'ouvrir / le créer.
Chris Johnsen
Sous Windows pour lire, /Users/USERX/.ssh/configvous devez définir votre HOMEenvironnement local sur /Users/USERX.
kenorb

Réponses:

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

Notez que le numéro de port doit être là sans les crochets: []

Christo
la source
Cela fonctionne, mais la correction de Chris Johnsen permet une URL propre lors de l'utilisation de numéros de port personnalisés
ryanzec
6
:-) Si vous me demandez, la syntaxe de l'URL git est impure, et ce qui précède est plus normalisé
Christo
J'admets que la syntaxe que vous avez donnée est plus descriptive, mais devoir se rappeler d'ajouter le numéro de port personnalisé est ennuyeux. Configurer ce numéro de port et ne pas avoir à s'en souvenir est un peu plus facile mais à chacun son propre (c'est pourquoi cela peut être fait dans les deux sens) :)
ryanzec
48
Notez que cela ne fonctionnera pas si vous supprimez le protocole. c'est-à-dire que si vous essayez ce qui suit, cela ne fonctionnera pas. git clone [email protected]:[port]/gitolite-admin
Bijay Rungta
1
sur Windows avec plink, la syntaxe de travail semble êtregit clone ssh://[email protected]:port/home/user/gitolite-admin
Roman Plášil
18

Les réponses ci-dessus sont belles et géniales, mais pas claires pour les nouveaux utilisateurs de git comme moi. Donc, après quelques recherches, j'offre cette nouvelle réponse.

1 Quel est le problème avec le fichier de configuration ssh?

Lorsque le fichier de configuration n'existe pas, vous pouvez en créer un. Outre portle fichier de configuration peut inclure d'autres options de configuration ssh: user IdentityFileet ainsi de suite, le fichier de configuration ressemble à

Host mydomain.com
    User git
    Port 12345

Si vous utilisez Linux, veillez à ce que le fichier de configuration ait une autorisation stricte: lecture / écriture pour l'utilisateur, et non accessible par d'autres

2 Qu'en est-il de la manière ssh url?

C'est cool, la seule chose que nous devons savoir, c'est qu'il existe deux syntaxes pour ssh url dans git

  • syntaxe standard ssh://[user@]host.xz[:port]/path/to/repo.git/
  • scp comme syntaxe [user@]host.xz:path/to/repo.git/

Par défaut, Gitlab et Github afficheront le scp comme l' url de syntaxe , et nous ne pouvons pas donner le port ssh personnalisé. Donc, pour changer le port ssh, nous devons utiliser la syntaxe standard

Jim Green
la source
14

Lorsque vous voulez un chemin relatif depuis votre répertoire personnel (sur n'importe quel UNIX), vous utilisez cette étrange syntaxe:

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

Par exemple, si le dépôt est /home/jack/projects/jillwebsur le serveur jill.comet que vous vous connectez comme jackavec l' sshdécoute sur le port 4242:

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

Et lorsque vous vous connectez en tant que jill(en supposant que vous disposez des autorisations de fichier):

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

Daniel Santos
la source
mec, cela avait été perplexe pendant un moment et c'était exactement ce que j'avais besoin de savoir. savez-vous où cela est documenté?
Shaun Wilson
@Shaun Wilson Désolé, je ne me souviens pas très bien. Mais il m'a fallu un certain temps pour trouver la réponse, alors j'ai pensé que je devrais la partager ici, car c'était l'une de mes impasses.
Daniel Santos
1
Merci! Surtout si vous êtes sur un plan d'hébergement partagé, la partie ~ [utilisateur] est importante. Cela m'a aidé à cloner mon repo.
Jim Wilson
2
@ShaunWilson la spécification de chemin est un chemin UNIX standard. Si vous êtes connecté à un système UNIX, ~ est un raccourci pour le répertoire personnel, il est utile à la fois pour économiser beaucoup de saisie et puisque le répertoire personnel peut être situé dans des endroits non standard. Ce qui précède peut ne pas fonctionner sur un serveur Windows.
Samuel Åslund
@Samuel Åslund Merci, j'ai mis à jour ma réponse. J'oublie souvent Windows parce que ... eh bien, je ne veux pas être collant, mais c'est horrible en comparaison. Néanmoins, c'est une distinction importante.
Daniel Santos
9

(Mise à jour: quelques années plus tard, les "compagnies aériennes" Google et Qwant m'envoient toujours ici lors de la recherche de "port ssh git non par défaut") Une meilleure façon probablement dans les nouvelles versions de git est d'utiliser le GIT_SSH_COMMAND ENV.VAR comme:

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

Cela a l'avantage supplémentaire de permettre toute autre option appropriée ssh (port, priv.key, IPv6, périphérique PKCS # 11, ...).

Erizon
la source