Mercurial "hg clone" на 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 arg, чтобы понять). Так что я в растерянности относительно того, как plink вообще получает значение этого сервера.

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

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

У меня вопрос, как я могу настроить мои настройки так, чтобы ssh://username@inthom.com:####/Repos/test правильно анализировалось как имя пользователя, имя хоста, номер порта и репо для копирования? Что-то не так с версией plink, которую я использую, или есть какая-то настройка, которую я, возможно, испортил? Если это вина Плинка, могу ли я использовать альтернативный инструмент?

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

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

3 ответа

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

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

совершенно нормально, но проблема с Plink.

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

"C: / Program Files / PuTTY / Ключевые файлы /KyleKey.ppk"

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

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

  2. Вы можете использовать короткие имена Windows. Например, у меня есть

    ssh = "C:\Progra~2\Plink\Plink.exe" -ssh -i "C:\Progra~2\PuTTYgen\hrle.ppk"

    в моем "Mercurial.ini".

    "C: \ Progra ~ 2" - это "C: \ Program Files (x86)".

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

А также, вы должны добавить этот сервер, чтобы узнать список серверов, прежде чем использовать Plink в сочетании с TortoiseHg или каким-либо другим инструментом GUI, например MercurialEclipse. Если вы этого не сделаете, Plink будет зависать в ожидании ответа, который вы не можете дать, потому что вы работаете с TortoiseHg, а не с командной строкой. Подробнее об этом предмете в http://mercurial.selenic.com/wiki/AccessingSshRepositoriesFromWindows.

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

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

Пример:

plink -ssh -C -l {username} -pw {pass} -P 22 -i "C: / Program Files / PuTTY / Ключевые файлы / KyleKey.ppk" inthom.com:/Repos/test

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

Другие вопросы по тегам