Клон Mercurial hg в Windows через ssh с проблемой plink

У меня есть машина с Windows Server 2008 (iis7), на которой настроен CopSSH. Чтобы подключиться к нему, у меня есть машина с Windows 7 с установленным Mercurial 1.5.1 (и TortoiseHg).

Я могу подключиться к серверу с помощью PuTTY с нестандартным портом ssh и файлом .ppk. Итак, я знаю, что на сервер можно подключиться по SSH.

Затем я хотел использовать CLI для подключения через hg clone, чтобы получить частное репо. Я видел в другом месте, что вам нужно настроить ssh в вашем файле mercurial.ini, поэтому в моем mercurial.ini есть строка: ssh = plink.exe -ssh -C -l username -P #### -i "C:/Program Files/PuTTY/Key Files/KyleKey.ppk"
Примечание:
username заполняется именем пользователя, которое я установил через copSSH.
#### заполнен нестандартным портом ssh, который я определил для copSSH.

Я пытаюсь выполнить команду hg clone ssh://inthom.com, но получаю следующую ошибку:
remote: bash: inthom.com: command not found
abort: no suitable response from remote hg!

Похоже, что hg или plink анализируют имя хоста так, что думают, что inthom.com — это команда, а не сервер, к которому нужно подключиться по ssh. Это действительно странно.

Затем я попытался просто использовать plink для подключения через plink -P #### ssh://inthom.com, и затем мне было предложено ввести имя пользователя и следующий пароль. Я ввожу их оба, а затем получаю эту ошибку:
bash: ssh://inthom.com: No such file or directory

Так что теперь похоже, что plink неправильно анализирует имя хоста.

Я некоторое время возился, пытаясь понять, как сделать вызов hg clone с пустым полем ssh://, и в конце концов понял, что эта команда позволяет мне получить доступ к серверу и клонировать тестовый репозиторий на сервере inthom.com:< бр> hg clone ssh://!/Repos/test

! - это символ, который я нашел, поэтому я оставлю имя хоста пустым, но укажу папку репо для клонирования.

Чего я действительно не понимаю, так это того, как plink вообще знает, к какому серверу подключаться по ssh. ни мой mercurial.ini, ни команда не указывают сервер. Ни в одном из примеров hg clone, которые я видел, нет символа !. Все они используют адрес, что имеет смысл, поэтому вы можете подключиться к любому репозиторию через ssh, который хотите клонировать.

Мое единственное предположение состоит в том, что каким-то образом по умолчанию используется последний сервер, к которому я использовал PuTTY для SSH, но я подключился по SSH к другому серверу, а затем попытался использовать plink, чтобы добраться до него, но plink по-прежнему по умолчанию использует inthom.com (проверено с помощью аргумент -v для подключения). Поэтому я не понимаю, как plink вообще получает это значение сервера.

Для «забавы» я попытался использовать TortoiseHg и могу клонировать репо только тогда, когда я использую ssh://!/Repos/test в качестве источника.

Теперь вы можете видеть, что, поскольку plink неправильно анализирует имя хоста, мне пришлось указать номер порта и имя пользователя в файле mercurial.ini, а не в имени хоста, например [email protected]:#### как вы ожидаете. Попытка понять это поначалу сводила меня с ума, потому что я получал ошибки о том, что хост недоступен, чего, как я знал, быть не должно.

Мой вопрос заключается в том, как я могу настроить свою настройку так, чтобы ssh://[email protected]:####/Repos/test правильно анализировался как имя пользователя, имя хоста, номер порта и репо для копирования? Что-то не так с версией plink, которую я использую, или есть какие-то настройки, которые я мог перепутать? Если это ошибка plink, есть ли альтернативный инструмент, который я могу использовать?

Я собираюсь попытаться настроить своего друга для подключения к этому же репозиторию, поэтому я хотел бы иметь чистое решение вместо этого ! бизнеса. Особенно, когда я понятия не имею, как plink получает этот сервер по умолчанию, поэтому я не уверен, сможет ли он вообще правильно добраться до inthom.com.

PS. Мне пришлось использовать массу различных руководств, чтобы хотя бы добраться до этого этапа. Поэтому я еще не пробовал отправлять какие-либо изменения на сервер. Надеюсь, я разберусь с этим, и тогда я смогу попробовать внести изменения в репо.


person Kyle Tolle    schedule 10.05.2010    source источник
comment
@Sean Madden - Когда я ввожу команду, которую вы рекомендовали для plink, я все еще получаю сообщение об ошибке: remote: bash: inthom.com: command not found abort: no suitable response from remote hg! Вам нужен префикс ssh://, чтобы сообщить Mercurial, что вы хотите использовать ssh-соединение. Точно так же, когда я пытаюсь сделать hg clone ssh://inthom.com/Repos/test, я получаю error: remote: bash: inthom.com: command not found abort: no suitable response from remote hg! Итак, plink откуда-то все еще получает inthom.com по умолчанию... Есть еще идеи?   -  person Kyle Tolle    schedule 12.05.2010


Ответы (3)


Я знаю, что опаздываю, но лучше сейчас, чем никогда. Итак... Команда для подключения к Mercurial SSH

ssh = plink.exe -ssh -C -l имя пользователя -P #### -i "C:/Program Files/PuTTY/Key Files/KyleKey.ppk"

все в порядке, но проблема с Plink.

У Plink есть проблемы с папками, в именах которых есть пробелы. Значит, проблема в

"C:/Program Files/PuTTY/Key Files/KyleKey.ppk"

У вас есть два варианта:

  1. Вы можете переместить этот файл «KyleKey.ppk» по пути без пробелов в имени. Например, вы можете переместить этот файл в папку «C:\» или «D:\Path\Without\Space\In\Name».

  2. #P8# <блочная цитата> #P9# #P10# #P11#

Plink зависнет, если закрытый ключ SSH защищен паролем.

Кроме того, вы должны добавить этот сервер в список серверов, прежде чем использовать Plink в сочетании с TortoiseHg или каким-либо другим инструментом с графическим интерфейсом, таким как MercurialEclipse. Если вы этого не сделаете, Plink зависнет в ожидании вашего ответа, который вы не сможете дать, потому что вы работаете с TortoiseHg, а не в командной строке. Подробнее об этом в разделе Доступ к SshRepositoriesFromWindows.

person Hrvoje Varga    schedule 08.06.2010

С plink вам не нужно использовать идентификатор протокола ssh://. Вы можете просто использовать формат {user}@{host}:{path}, и он будет работать нормально.

Пример:

plink -ssh -C -l {имя пользователя} -pw {пароль} -P 22 -i "C:/Program Files/PuTTY/Key Files/KyleKey.ppk" inthom.com:/Repos/test

замените {username} на пользователя и {pass} на пароль.

person Sean Madden    schedule 11.05.2010

йоу, у меня была такая же проблема. Что было не так с моей настройкой, так это то, что plink использовал сервер по умолчанию, установленный в шпатлевке, вместо того, который я предоставил. Мне пришлось открыть замазку и удалить сервер по умолчанию, а затем сохранить. Попробуйте использовать plink без сервера. Если ваша команда прошла успешно, у вас есть сервер по умолчанию.

person Community    schedule 04.06.2010