Git na niestandardowym porcie SSH

149

Mój dostawca VPS zaleca pozostawienie portu SSH pod niestandardowym numerem portu, który przypisują mu domyślnie (nie 22). Chodzi o to, że chociaż wiem, że mogę podać numer portu podczas tworzenia zdalnej konfiguracji, wygląda na to, że nie mogę zrobić tego samego, wykonując klon git. Używam gitolite, więc polecenia klonowania wyglądają następująco:

git clone [email protected]:gitolite-admin

Czy istnieje sposób na ukrycie tego przy użyciu niestandardowego numeru portu ssh?

Powinienem również wspomnieć, że uruchamiam cygwin w systemie Windows. Widziałem wiele miejsc mówiących o dodaniu niestandardowego portu do ~/.ssh/configpliku, takiego jak

Host mydomain.com
    Port 12345

jednak w cygwin ten plik wydaje się nie istnieć.

ryanzec
źródło
8
Ścieżka do pliku znajduje się .ssh/config(nie conf) w katalogu domowym użytkownika. Nie jest wymagany do podstawowej obsługi, dlatego domyślnie nie istnieje. Będziesz musiał go stworzyć. Spróbuj vim ~/.ssh/config(lub użyj preferowanego, zainstalowanego edytora tekstu), aby go otworzyć / utworzyć.
Chris Johnsen,
W systemie Windows do czytania /Users/USERX/.ssh/configmusisz ustawić HOMEśrodowisko lokalne na /Users/USERX.
kenorb

Odpowiedzi:

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

Zwróć uwagę, że numer portu powinien znajdować się bez nawiasów kwadratowych: []

Christo
źródło
To działa, jednak poprawka Chrisa Johnsena pozwala na czysty adres URL podczas korzystania z niestandardowych numerów portów
ryanzec
6
:-) Jeśli o mnie chodzi, składnia git URL jest nieczysta, a powyższe jest bardziej znormalizowane
Christo
Przyznaję, że podana przez ciebie składnia jest bardziej opisowa, ale konieczność pamiętania o dodaniu niestandardowego numeru portu jest denerwująca. Skonfigurowanie tego numeru portu bez konieczności zapamiętywania jest nieco łatwiejsze, ale dla każdego z nich (dlatego można to zrobić w obie strony) :)
ryanzec 24.04.11
48
Pamiętaj, że nie zadziała, jeśli usuniesz protokół. tzn. jeśli spróbujesz wykonać poniższe czynności, to nie zadziała. git clone [email protected]:[port]/gitolite-admin
Bijay Rungta
1
na Windows z plink, wydaje się, że działająca składnia togit clone ssh://[email protected]:port/home/user/gitolite-admin
Roman Plášil,
18

Powyższe odpowiedzi są ładne i świetne, ale nie są jasne dla nowych użytkowników git, takich jak ja. Więc po pewnym dochodzeniu, oferuję tę nową odpowiedź.

1 Jaki jest problem z plikiem konfiguracyjnym ssh?

Jeśli plik konfiguracyjny nie istnieje, możesz go utworzyć. Poza porttym plik konfiguracyjny może zawierać inną opcję konfiguracji ssh: user IdentityFilei tak dalej, plik konfiguracyjny wygląda tak

Host mydomain.com
    User git
    Port 12345

Jeśli używasz Linuksa, uważaj, że plik konfiguracyjny musi mieć ścisłe uprawnienia: do odczytu / zapisu dla użytkownika i nie jest dostępny dla innych

2 a co ze sposobem ssh url?

To fajne, jedyne, co powinniśmy wiedzieć, to że istnieją dwie składnie dla ssh url w git

  • standardowa składnia ssh://[user@]host.xz[:port]/path/to/repo.git/
  • scp jak składnia [user@]host.xz:path/to/repo.git/

Domyślnie Gitlab i Github pokażą scp jak składnię url i nie możemy podać niestandardowego portu ssh. Aby zmienić port ssh, musimy użyć standardowej składni

Jim Green
źródło
14

Jeśli chcesz mieć względną ścieżkę z katalogu domowego (w każdym systemie UNIX), użyj tej dziwnej składni:

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

Na przykład, jeśli repozytorium znajduje /home/jack/projects/jillwebsię na serwerze jill.comi logujesz się tak, jak w jackprzypadku sshdnasłuchiwania na porcie 4242:

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

A kiedy logujesz się jako jill(zakładając, że masz uprawnienia do plików):

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

Daniel Santos
źródło
Człowieku, przez jakiś czas się to martwiło i było to dokładnie to, co chciałem wiedzieć. czy wiesz, gdzie jest to udokumentowane?
Shaun Wilson
@Shaun Wilson Przepraszam, nie pamiętam. Ale znalezienie odpowiedzi zajęło mi trochę czasu, więc pomyślałem, że powinienem się nią podzielić, ponieważ była to jedna z moich ślepych uliczek.
Daniel Santos
1
Dzięki! Zwłaszcza jeśli korzystasz ze wspólnego planu hostingowego, ważna jest część ~ [użytkownik]. Pomogło mi to sklonować moje repozytorium.
Jim Wilson
2
@ShaunWilson specyfikacja ścieżki to standardowa ścieżka systemu UNIX. Jeśli jesteś zalogowany do systemu UNIX, ~ jest skrótem dla katalogu domowego, jest to przydatne zarówno do zaoszczędzenia dużej ilości wpisywania, jak i dlatego, że katalog domowy może znajdować się w niestandardowych miejscach. Powyższe może nie działać na serwerze Windows.
Samuel Åslund
@Samuel Åslund Dziękuję, zaktualizowałem moją odpowiedź. Często zapominam o Windowsie, ponieważ ... cóż, nie chcę być tandetny, ale w porównaniu z tym jest okropny. Niemniej jest to ważne rozróżnienie.
Daniel Santos
9

(Aktualizacja: kilka lat później Google i Qwant „linie lotnicze” nadal wysyłają mnie tutaj podczas wyszukiwania „git non-default ssh port”) Prawdopodobnie lepszym sposobem w nowszych wersjach git jest użycie GIT_SSH_COMMAND ENV.VAR, takiego jak:

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

Ma to tę dodatkową zaletę, że zezwala na dowolną inną odpowiednią opcję ssh (port, klucz priv., IPv6, urządzenie PKCS # 11, ...).

earizon
źródło