Git On Custom SSH Port

149

Мой провайдер VPS рекомендует оставить свой порт SSH для номера пользовательского порта, который он назначает по умолчанию (не 22). Дело в том, что хотя я знаю, что могу указать номер порта при создании удаленной конфигурации, мне кажется, что я не могу сделать то же самое при выполнении git-клона. Я использую Gitolite, поэтому я клонировать команды выглядят так:

git clone git@mydomain.com:gitolite-admin

Есть ли способ преобразовать это в использование пользовательского номера порта ssh?

Я должен также упомянуть, что я использую Cygwin на Windows. Я видел несколько мест, говорящих добавить пользовательский порт в ~/.ssh/configфайл, как

Host mydomain.com
    Port 12345

однако в cygwin этот файл не существует.

ryanzec
источник
8
Путь к файлу .ssh/config(не conf) в домашнем каталоге вашего пользователя. Он не требуется для базовой операции и, следовательно, не существует по умолчанию. Вы должны будете создать это. Попробуйте vim ~/.ssh/config(или используйте предпочитаемый текстовый редактор), чтобы открыть / создать его.
Крис Джонсен
2
Дубликат: stackoverflow.com/questions/3596260/…
Kzqai
В Windows для чтения /Users/USERX/.ssh/configвам нужно установить HOMEлокальную среду в /Users/USERX.
kenorb

Ответы:

328
git clone ssh://git@mydomain.com:[port]/gitolite-admin

Обратите внимание, что номер порта должен быть указан без квадратных скобок: []

Христо
источник
Это работает, однако исправление Криса Джонсена позволяет использовать чистый URL-адрес при использовании пользовательских номеров портов
ryanzec
6
:-) Если вы спросите меня, синтаксис URL git нечист, а вышеприведенное более нормализовано
Christo
Я признаю, что приведенный вами синтаксис является более описательным, но необходимость помнить, что нужно добавить номер пользовательского порта, раздражает. Настроить этот номер порта, а затем не нужно помнить, что это немного проще, но для каждого свой (это можно сделать обоими способами) :)
ryanzec
48
Обратите внимание, что это не будет работать, если вы удалите протокол. т.е. если вы попробуете следующее, это не будет работать. git clone git@mydomain.com:[port]/gitolite-admin
Биджай Рунгта
1
в Windows с plink рабочий синтаксис выглядит следующим образомgit clone ssh://git@mydomain.com:port/home/user/gitolite-admin
Роман Плашил
18

Приведенные выше ответы хороши и хороши, но не ясны для новых пользователей git, таких как я. Поэтому после некоторого расследования я предлагаю этот новый ответ.

1 в чем проблема с конфигурационным файлом ssh?

Когда файл конфигурации не существует, вы можете создать его. Кроме portтого, файл конфигурации может включать в себя другой параметр конфигурации ssh: user IdentityFileи так далее, файл конфигурации выглядит так:

Host mydomain.com
    User git
    Port 12345

Если вы работаете в Linux, позаботьтесь о том, чтобы файл конфигурации имел строгое разрешение: чтение / запись для пользователя и недоступность для других

2 как насчет пути ssh url?

Это круто, единственное, что мы должны знать, это то, что в git есть два синтаксиса для ssh url

  • стандартный синтаксис ssh://[user@]host.xz[:port]/path/to/repo.git/
  • scp как синтаксис [user@]host.xz:path/to/repo.git/

По умолчанию Gitlab и Github будут показывать URL-адрес синтаксиса, подобный scp , и мы не можем указать пользовательский порт ssh. Поэтому для изменения порта ssh нам нужно использовать стандартный синтаксис

Джим грин
источник
14

Когда вам нужен относительный путь из вашего домашнего каталога (в любой UNIX), вы используете этот странный синтаксис:

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

Например, если репозиторий находится /home/jack/projects/jillwebна сервере, jill.comи вы входите в систему, как jackпри sshdпрослушивании через порт 4242:

ssh://jack@jill.com:4242/~/projects/jillweb

И при входе в систему jill(если у вас есть права доступа к файлам):

ssh://jill@jill.com:4242/~jack/projects/jillweb

Даниэль Сантос
источник
Чувак, это было какое-то время озадачено и было именно тем, что мне нужно было знать. Вы знаете, где это задокументировано?
Шон Уилсон
@Shaun Wilson Извините, я не совсем помню. Но мне потребовалось некоторое время, чтобы найти ответ, поэтому я решил поделиться этим здесь, поскольку это был один из моих тупиков.
Даниэль Сантос
1
Спасибо! Особенно, если вы находитесь на плане общего хостинга, важна часть ~ [user]. Это помогло мне клонировать мой репо.
Джим Уилсон
2
@ShaunWilson - это стандартный путь UNIX. Если вы вошли в систему UNIX, ~ является сокращением для домашнего каталога, это полезно как для экономии текста, так как домашний каталог может находиться в нестандартных местах. Выше может не работать на сервере Windows.
Самуэль Ослунд
@ Сэмюэль Ослунд Спасибо, я обновил свой ответ. Я часто забываю о Windows, потому что ... ну, я не хочу быть липкой, но это ужасно по сравнению. Тем не менее, это важное различие.
Даниэль Сантос
9

(Обновление: несколько лет спустя Google и Qwant «Airlines» по-прежнему отправляют меня сюда при поиске «git не-ssh-порта по умолчанию») Вероятно, лучший способ в более новых версиях git - использовать GIT_SSH_COMMAND ENV.VAR, например:

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

Это дает дополнительное преимущество, позволяя использовать любую другую подходящую для ssh опцию (порт, priv.key, IPv6, устройство PKCS # 11, ...).

earizon
источник