GitExtensions + Putty через SSH на пользовательском порту

У меня есть репозиторий git, который я вытягиваю, используя путь, подобный этому:

git pull ssh://[email protected]:1234/path/to/repository.git

Когда GitExtensions пытается извлечь из репо с помощью plink, он делает этот вызов:

plink -T [email protected]:/path/to/repository.git

Это заканчивается неудачей, потому что он фактически пингорует порт # 22, а не # 1234.

Правильный вызов сделать будет

plink -T -P 1234 [email protected]:/path/to/repository.git

Если я создаю псевдоним "hostCom" в моем ~/.ssh/config, он работает корректно (подключение к # 1234), если я просто сделаю это:

plink -T [email protected]

Но как только я добавлю путь в репозиторий git, он снова войдет в # 22.

Еще одна попытка, которую я пробовал, - создать сеанс в putty, называть его "hostPutty" и установить для него порт по умолчанию и т.д. Нижняя строка заканчивается тем же, что: Невозможно объединить путь к git repo с пользовательским портом.

Как объединить все части, чтобы заставить их работать?

И почему OpenSSH может справиться с проблемой, но Putty не может? Единственная проблема с OpenSSH заключается в том, что он продолжает запрашивать у меня пароль для закрытого ключа при каждой попытке подключения (и я не хочу создавать закрытый ключ без пароля).

Ответ 1

Получил это.

Вот что привело меня к неправильному пути:

  • Не создавайте никаких сеансов в Putty, как описано здесь
  • Не используйте никакие псевдонимы хостов, которые вы могли бы определить в ~/.ssh/config

Вот как вы его работаете:

  • Очевидно, убедитесь, что GitExtensions настроен на использование Putty, а не OpenSSH
  • Убедитесь, что plink.exe(тот, который доступен с помощью GitExtensions или специально установлен с Putty) находится в пути без пробелов.
  • Задайте свою переменную env% GIT_SSH%, чтобы указать на plink.exe(она может указывать на ssh.exe по умолчанию), убедитесь, что нет апострофов, поскольку значение будет использоваться как "как есть" (то, почему вы не может использовать пробелы, как указано выше)
  c:\>echo %GIT_SSH%
  C:\tools\PuTTY\plink.exe
  • Используйте команду "full", чтобы вытащить, никаких псевдонимов хоста, которые позволили бы вам не указывать порт и т.д. в приведенном выше примере. Если порт отсутствует, а там только двоеточие, git рассматривает его как разделитель путей, а ssh - как разделитель портов (поэтому они укусят каждого достаточно плохо).

    git clone ssh://[email protected]: 1234/path/to/repository.git

Если вы сделаете это, git + plink на самом деле правильно разобрать вещи!

Если вы этого не сделаете, вы можете столкнуться со всеми проблемами:

  • Если% GIT_SSH% указал на ssh.exe и использовал псевдоним хоста вместо пути, вкл. порт
  ssh.exe": hostPutty:path: no address associated with name
  fatal: The remote end hung up unexpectedly
  • Используемые апострофы в% GIT_SSH%
  error: cannot spawn "C:\tools\PuTTY\plink.exe": No such file or directory
  fatal: unable to fork

Ответ 2

Для меня я все время получал сообщение об ошибке, что имя хоста не существует. Попробовав кучу предложений по этому и другим темам, я проверил мой удаленный URL-адрес, и это было преступником. Если вы используете шпатлевку, убедитесь, что она начинается с git @github.com not https://github

Вот пример того, как это проверить в  git extensions