Git на користувальницький порт SSH


149

Мій постачальник VPS рекомендує залишити свій порт SSH на номер користувальницького порту, який він призначить за замовчуванням (не 22). Справа в тому, що я знаю, що можу дати номер порту при створенні віддаленої конфігурації, схоже, я не можу зробити те ж саме, коли роблю клон git. Я використовую гітоліт, тому команди для клонування виглядають так:

git clone git@mydomain.com:gitolite-admin

Чи є спосіб приховати це за допомогою спеціального номера порту ssh?

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

Host mydomain.com
    Port 12345

однак у Cygwin цей файл, здається, не існує.


8
Ім'я шляху файлу знаходиться у .ssh/config( confдомашньому каталозі) вашого користувача (не ). Він не потрібен для основної роботи, і тому не існує за замовчуванням. Вам доведеться його створити. Спробуйте vim ~/.ssh/config(або використовуйте уподобаний встановлений текстовий редактор), щоб відкрити / створити його.
Кріс Джонсен


У Windows для читання /Users/USERX/.ssh/configвам потрібно встановити HOMEмісцеве середовище /Users/USERX.
kenorb

Відповіді:


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

Зверніть увагу, що номер порту повинен бути без квадратних дужок: []


Це все-таки працює, однак виправлення Кріса Джонсена дозволяє отримати чисту URL-адресу при використанні користувацьких номерів портів
ryanzec

6
:-) Якщо ви запитаєте мене, синтаксис URL-адреси git є нечистим, а вищезазначене є більш нормалізованим
Крісто,

Я визнаю, що поданий вами синтаксис є більш описовим, але потрібно пам'ятати про те, щоб додати номер спеціального порту, дратує. Налаштувати цей номер порту, а потім не пам’ятати, що це трохи простіше, але кожен свій власний (тому це можна зробити обома способами) :)
ryanzec,

48
Зауважте, що це не спрацює, якщо ви видалите протокол. тобто якщо ви спробуєте наступне, це не вийде. git clone git@mydomain.com:[port]/gitolite-admin
Bijay Rungta

1
у Windows з планкістю, здається, що працює синтаксисgit clone ssh://git@mydomain.com:port/home/user/gitolite-admin
Роман Плашил

18

Вище відповіді приємні та чудові, але не зрозумілі для нових користувачів git, як я. Тож після деякого розслідування я пропоную цю нову відповідь.

1 в чому проблема із файлом ssh config?

Коли конфігураційний файл не існує, його можна створити. Окрім portфайлу конфігурації, можна включити й інший параметр ssh config: 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 показуватимуть scp як синтаксичний URL, і ми не можемо надати користувальницький порт 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.
Самуель Ослунд

@Samuel Åslund Дякую, я оновив свою відповідь. Я часто забуваю про Windows, тому що ... ну я не хочу бути клейким, але це порівняно жахливо. Тим не менш, це важлива відмінність.
Даніель Сантос

9

(Оновлення: через кілька років компанії Google та Qwant «авіакомпанії» все одно надсилають мене сюди, коли шукають «git non-ssh port») Можливо, кращим способом у новіших версіях 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 пристрій, ...).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.