Как сохранить имя пользователя и пароль с Mercurial?

269

Я использовал Mercurial в личном проекте, и я каждый раз набирал свое имя пользователя и пароль, когда хотел что-то отправить на сервер.

Я попытался добавить следующее к .hgrcфайлу в моем домашнем каталоге, но это, кажется, полностью игнорируется.

[ui]
username = MY_USER_NAME
password = MY_PASSWORD

Как сделать это правильно?

Сатору
источник

Ответы:

328

Вы можете создать раздел авторизации в вашем файле .hgrcили в Mercurial.iniфайле, например так:

[auth]
bb.prefix = https://bitbucket.org/repo/path
bb.username = foo
bb.password = foo_passwd

Часть 'bb' является произвольным идентификатором и используется для сопоставления префикса с именем пользователя и паролем - удобно для управления различными комбинациями имени пользователя / пароля на разных сайтах (префикс)

Вы также можете указать только имя пользователя, тогда вам просто нужно будет ввести пароль при нажатии.

Я также рекомендовал бы взглянуть на расширение связки ключей . Поскольку он хранит пароль в кольце ключей вашей системы вместо простого текстового файла, он более безопасен. Он входит в комплект TortoiseHg для Windows, и в настоящее время обсуждается вопрос о его распространении в виде расширения на всех платформах.

Лорен Хольст
источник
3
Почему это не работает, когда сервер: ssh: // HGSERVER? формат "ssh: // username: password @ HGSERVER" тоже не работает ..
Орен
1
@Oren - посмотрите на комментарий ниже - если вы используете SSH, почему бы не использовать регистрацию на основе ключей?
Дэвид Идс
@santafebound Как говорится в тексте, он «произвольный» и используется только для связи имени пользователя и пароля с префиксом, поэтому предоставьте любой тег, который имеет смысл для вас.
Крис Макколи
Я действительно не рекомендовал бы хранить пароли в виде простого текста (что и делает этот ответ, даже если в нем также кратко упоминается лучшая альтернатива).
Джаспер
170

Есть три способа сделать это: использовать файл .hgrc, использовать ssh или использовать расширение для ключей


1. НЕПРАВИЛЬНЫЙ способ - обновите файл ~ / .hgrc

Формат, который работает для меня (в моем файле ~ / .hgrc) это

[ui]
username=Chris McCauley <chris.mccauley@mydomain.com>

[auth]
repo.prefix = https://server/repo_path
repo.username = username
repo.password = password


Вы можете настроить столько репо, сколько захотите, добавив больше тройки префикса, имени пользователя и пароля, добавив уникальный тег.

Это работает только в Mercurial 1.3, и, очевидно, ваши имя пользователя и пароль в виде обычного текста - не очень хорошо.


2. Безопасный способ - используйте SSH для избежания использования паролей

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


Вы можете найти больше информации о настройке входа без пароля здесь


3. Брелок Расширение

Если вы хотите безопасный вариант, но не знакомы с SSH, почему бы не попробовать это?

Из документов ...

Расширение запрашивает пароль HTTP при первом извлечении / отправке в / из заданного удаленного репозитория (так же, как это делается по умолчанию), но сохраняет пароль (определяемый комбинацией имени пользователя и URL-адреса удаленного репозитория) в базе паролей. При следующем запуске он проверяет имя пользователя в .hg / hgrc, затем - подходящий пароль в базе данных паролей и использует эти учетные данные, если они найдены.

Более подробная информация здесь

Крис МакКоли
источник
3
Сатору, Крис говорит не о mercurial, а о ssh: ssh можно настроить так, чтобы вам не приходилось идентифицировать себя по паролю (как описано, например, здесь: debian-administration.org/articles/152 ).
Томислав Накич-Альфиревич
4
Метод 2 - это действительно единственный способ безопасного управления и поддержки прав доступа на уровне пользователя в удаленной системе.
Питер Роуэлл
2
Ответ user570626 об использовании набора ключей намного лучше, чем любой из них. @Peter Rowell: установка ssh - реальная проблема, если у вас есть несколько пользователей и репозитории; вам нужны локальные юникс-пользователи и вы должны возиться с ограничением команд, которые можно запускать с помощью .ssh / authorized_keys и оболочки оболочки. Не совсем чистое решение.
Draemon
5
@ Питер Роуэлл: 1. какая разница? Я сказал, что его решение лучше не раньше. 2. Это не имеет никакого отношения к среде хостинга, это чисто клиентская часть (в отличие от вашего SSH-решения, которое требует изменений на стороне сервера для его поддержки). 3. Затмевая троллинг и хвастовство, я все же говорю, что это не чистое решение. Вам нужен локальный пользователь, и вы должны предоставить ему доступ к оболочке, а затем ограничить его. Доступ к оболочке не всегда разумный вариант. Я удивлен, что кто-то из вашего опыта не сталкивался с системным администратором, который не хотел предоставлять доступ к вашей оболочке службы.
Draemon
2
@Draemon: я думаю, у нас разные переживания. Лично я не буду работать в системе, где у меня нет приглашения оболочки. Это делает меня полностью зависимым от другой системы, которая уже установила то, что мне нужно. По моему общему опыту, если я не могу получить приглашение, я почти наверняка не смогу получить другие услуги, которые я считаю фундаментальными для моего рабочего процесса. Разные (ключевые) штрихи для разных людей.
Питер Роуэлл
65

Никто не упомянул расширение ключей. Это сохранит имя пользователя и пароль в системном брелоке, что гораздо более безопасно, чем хранить ваши пароли в статическом файле, как упомянуто выше. Выполните шаги ниже, и вы должны быть в порядке. Я запустил это на Ubuntu примерно через 2 минуты.

>> sudo apt-get install python-pip
>> sudo pip install keyring
>> sudo pip install mercurial_keyring

**Edit your .hgrc file to include the extension**
[extensions]
mercurial_keyring = 

https://www.mercurial-scm.org/wiki/KeyringExtension

user570626
источник
1
Это мое любимое решение. ... и только в секунду, что сказал @hadrien, после описанных трех действий он работает как
чудо
Я также второй @ngeek для поддержки меня!
Адриен
В Windows хотя бы TortoiseHg поддерживает расширение
набора
К сожалению, в настоящее время расширение для ключей имеет ошибку в Windows, когда он может сохранить только один пароль за раз. Смотрите этот вопрос .
Лорен Хольст
Это кажется лучшим решением, но когда я пытаюсь использовать его в OSX, python вызывает ошибки при попытке получить пароль из цепочки для ключей.
Исаак
30

Простой способ взломать - добавить имя пользователя и пароль к ссылке в .hg/hgrcфайле вашего проекта :

[paths]
default = http://username:password@mydomain.com/myproject

(Обратите внимание, что таким образом вы сохраняете пароль в виде простого текста)

Если вы работаете над несколькими проектами в одном домене, вы можете добавить правило перезаписи в свой ~/.hgrcфайл, чтобы избежать повторения этого для всех проектов:

[rewrite]
http.//mydomain.com = http://username:password@mydomain.com

Опять же, поскольку пароль хранится в виде простого текста, я обычно храню только свое имя пользователя.

Если вы работаете в Gnome, я объясню, как интегрировать Mercurial и Gnome Keyring здесь:

http://aloiroberto.wordpress.com/2009/09/16/mercurial-gnome-keyring-integration/

Роберто Алои
источник
Я скачал расширение, однако, когда я попытался выдвинуть запрос на ввод пароля, он отказывается пропустить меня :( Может быть, я сделал это неправильно. Я никогда раньше не использовал Gnome Keyring. Спасибо вам все же.
Сатору
Возможно, вы захотите использовать опции --debug и --verbose для hg push, чтобы увидеть, что происходит не так ...
Роберто Алои
идеально подходит для данного случая ... если вы используете ssh, вам не нужно
вводить
Предполагая, что у вас есть роскошь устройства, от которого вы, конечно, можете получить открытый ключ.
Дэвид Дано
23

Никто выше не объяснил / разъяснил условия для начинающего пользователя. Они запутываются в условиях

.hg / hgrc - этот файл используется для репозитория в локальном / рабочем пространстве / в папке фактического репозитория .hg.

~ / .hgrc - этот файл отличается от приведенного ниже. этот файл находится в ~ или домашнем каталоге.

myremote.xxxx = ..... bb.xxxx = ......

Это одна из строк в разделе / ​​директива [auth] при использовании расширения ртутного набора ключей. Убедитесь, что имя сервера, которое вы там указали, совпадает с тем, которое вы используете при выполнении команды «hg clone», иначе брелок скажет «пользователь не найден». bb или myremote в строке ниже, это «псевдоним», который вы ДОЛЖНЫ дать при выполнении «hg clone http: /.../../ repo1 bb или myremote», в противном случае это не сработает, или вы должны убедиться, что ваш локальный Файл репозитория .hg / hgrc содержит тот же псевдоним, т. е. (что вы дали при выполнении hg clone .. в качестве последнего параметра).

PS следующие ссылки для ясных деталей, простите за быстро написанную грамматику.

Например: если внутри ~ / .hgrc (домашний каталог пользователя в Linux / Unix) или mercurial.ini в Windows в домашнем каталоге пользователя, содержится следующая строка, и если вы делаете

`"hg clone http://.../.../reponame myremote"`

, тогда вам никогда не будет предложено ввести учетные данные пользователя более одного раза на ссылку HTTP-репо. В ~ / .hgrc под [extensions] есть строка для "mercurial_keyring =" или "hgext.mercurial_keyring = /path/to/your/mercurial_keyring.py" .. там должна быть одна из этих строк.

[auth]
myremote.schemes = http https
myremote.prefix = thsusncdnvm99/hg
myremote.username = c123456

Я пытаюсь выяснить, как установить свойство PREFIX, чтобы пользователь мог клонировать или выполнять любые операции Hg без запросов имени пользователя / пароля и не беспокоясь о том, что он упомянул в http: // .... / ... for имя сервера при использовании ссылки репозитория Hg. Это может быть IP, имя сервера или полное доменное имя сервера

АКС
источник
4

Установка mercurial_keyring на Mac OSX с использованием MacPorts:

sudo port install py-keyring
sudo port install py-mercurial_keyring

Добавьте следующее в ~ / .hgrc:

# Add your username if you haven't already done so.
[ui]
username = email@address.com

[extensions]
mercurial_keyring =
ftvs
источник
Я получаю «нет модуля с именем mercurial_keyring» в TortoiseHg после выполнения этих команд и обновления моего файла .hgrc.
Дунк
Убедитесь, что у вас правильная версия Python, как описано здесь: stackoverflow.com/questions/5173197/…
phm
2

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

введите описание изображения здесь

Для добавления глобальных настроек вы можете получить доступ к файлу C: \ users \ user.name \ mercurial.ini и добавить раздел

[auth]
bb.prefix=https://bitbucket.org/zambezia/packagemanager
bb.username = $username
bb.password = $password

Надеюсь это поможет.

AB
источник
0

Хотя это может или не может работать в вашей ситуации, я считаю полезным генерировать открытый / закрытый ключ, используя Pagety Putty.

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

Если Pageant не запускается для вас после перезагрузки, вы можете добавить ярлык для Pageant в свое «меню Пуск» Windows, и для ярлыка может потребоваться заполнить «свойства» местоположением вашего частного (.ppk) файла. ,

После этого Mercurial и ваши локальные репозитории должны быть настроены на push / pull с использованием формата SSH.

Вот некоторые подробные инструкции на сайте Atlassian для Windows ИЛИ Mac / Linux.

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

  1. Запустите PuttyGen от Пуск -> PuTTY-> PuttyGen
  2. Сгенерируйте новый ключ и сохраните его как файл .ppk без ключевой фразы
  3. Используйте Putty для входа на сервер, к которому вы хотите подключиться
  4. Добавьте текст открытого ключа из PuttyGen к тексту ~ / .ssh / authorized_keys
  5. Создайте ярлык для вашего .ppk файла из Пуск -> Putty to Start -> Startup
  6. Выберите ярлык .ppk в меню «Автозагрузка» (это будет происходить автоматически при каждом запуске)
  7. Видите значок Pageant на панели задач? Щелкните правой кнопкой мыши и выберите «Новая сессия»
  8. Введите имя пользователя @ имя хоста в поле «Имя хоста»
  9. Теперь вы будете входить автоматически.
veeTrain
источник
0

Используйте расширение для ключей. Добавьте ниже запись в файл mercurial.ini.

[extensions] mercurial_keyring =

сударсан - 406
источник