Mercurial: Как выполнить отправку push-уведомлений в Bitbucket?

В нашей сети есть «главный» сервер Mercurial, который мы используем для локального промежуточного блока. Наша команда делает все наши толчки и тяги в/из этой коробки. У меня проблемы с реализацией, которую я использую, но я также сомневаюсь, является ли то, что я хочу сделать, хорошей идеей...

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

Вот HGRC из репозитория master:

[hooks]
changegroup =
changegroup.update = hg update
changegroup.bitbucket = hg push ssh://[email protected]/account/repo

Если я вручную отключу указанный выше толчок, все будет работать отлично. Однако в качестве крючка он не работает:

warning: changegroup.bitbucket hook exited with status 255

Я следовал этому руководству, чтобы заставить SSH работать: Настройка SSH для Git и Mercurial на Mac OSX /Линукс

Я получаю свои ключи, запускаю ssh-agent и ssh-add ключ. Но ssh-agent, похоже, ничего не делает, и как только я выхожу из сеанса SSH, он, кажется, оставляет память. Кроме того, когда я проверяю это с помощью ssh -Tv [email protected], он запрашивает мой пароль. Я думал, что весь смысл этого был в том, чтобы этого не делать?

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

И если да, то какая альтернатива у меня есть для пересылки коммитов в битбакет? Я бы предпочел не использовать HTTPS, потому что это потребовало бы ввода нашего пароля битбакета в виде простого/текстового файла в файле .hg/hgrc...

Может быть, есть какой-то более очевидный способ сделать это, который мне не хватает? Что касается разработчиков, я бы предпочел оставить все как есть (каждый нажимает на мастер), вместо того, чтобы перенастраивать ящик разработчика каждого, чтобы иметь закрытый ключ и вместо этого нажимать на битбакет...

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


person DOOManiac    schedule 19.12.2013    source источник
comment
Вы когда-нибудь слышали о настройке SSH? ОпенВПН?   -  person user2284570    schedule 26.12.2013
comment
У меня есть, но я не уверен, как это поможет с моей проблемой. Здесь нет проблем с брандмауэром или VPN... Не могли бы вы уточнить?   -  person DOOManiac    schedule 26.12.2013
comment
Если вы получите доступ к своему репозиторию mercurial через VPN, он будет зашифрован.   -  person user2284570    schedule 26.12.2013
comment
Но если я использую SSH для отправки в битбакет, соединение уже зашифровано. Моя проблема заключается в подключении...   -  person DOOManiac    schedule 27.12.2013
comment
VPN - это SSL/TLS, не обязательно ssh.   -  person user2284570    schedule 27.12.2013
comment
Конечно, но я все еще не понимаю, что вы пытаетесь сказать.   -  person DOOManiac    schedule 27.12.2013
comment
Что вам нужно попробовать использовать VPN, так как у вас проблемы с ssh   -  person user2284570    schedule 27.12.2013
comment
Ну, я не могу использовать VPN в Bitbucket, поэтому, если я что-то не упустил, я полагаю, что вы, возможно, не понимаете вопроса...   -  person DOOManiac    schedule 27.12.2013
comment
Как разработчики нажимают на главный репозиторий на промежуточной коробке? Локально (т.е. они уже работают на этой машине), по HTTP(S) или по SSH?   -  person Oben Sonne    schedule 28.12.2013
comment
У нас есть общий сетевой диск для мастера, на который мы нажимаем. Это значительно быстрее, чем отправка в BitBucket, и это еще одна причина, по которой мы хотели бы сохранить ее.   -  person DOOManiac    schedule 29.12.2013


Ответы (1)


Ого, тут много вопросов. Я ударю несколько из них:

Но ssh-agent, похоже, ничего не делает, и как только я выхожу из сеанса SSH, он, кажется, оставляет память.

Вы правы. ssh-agent предназначен для интерактивных сеансов, а не для автоматизации. В большинстве случаев, когда вы выходите из системы, он уничтожается, но даже если бы это было не так, он не работал бы так, как вы себе представляете, потому что, когда кто-то делает это hg push, он запускает новый, неинтерактивный сеанс, который не имел бы доступ к ssh-агенту в любом случае

Кроме того, когда я проверяю это с помощью ssh -Tv [email protected], он запрашивает мой пароль.

Проверять это так недопустимо. Это говорит: «Я хочу войти в интерактивный сеанс на битбакете с именем пользователя hg», но они не разрешают вам это делать. Если вы отправите им свой открытый ключ, они позволят вам войти в систему как пользователь hg только для выполнения hg неинтерактивных команд.

Кроме того, когда я проверяю это с помощью ssh -Tv [email protected], он запрашивает мой пароль.

Нет, открытые ключи должны быть общедоступными — например, вы можете перечислить чьи-либо на github. Открытый ключ просто говорит: «Любой, у кого есть закрытый ключ, соответствующий этому, имеет право ...», поэтому любой сайт, которому нужен ваш закрытый ключ, является мошенником, но любой сайт, которому нужен ваш открытый ключ, просто предлагает вам способ использовать что-то лучше, чем пароль.

Одна вещь, которую вы, возможно, упускаете из виду в хуках, это «кто» работает с хуком. Когда люди подключаются к вашему «центральному» репозиторию через ssh, хук запускается от имени их пользователя unix, а если они заходят через http, хук запускается от имени пользователя веб-сервера.

Если у тебя есть:

  • закрытый ключ ssh без пароля
  • открытый ключ, соответствующий настройке закрытого ключа на битбакете
  • пользователь unix, запускающий хук, используя этот закрытый ключ для доступа к bitbucket.org

тогда то, что вы пытаетесь сделать, сработает.

person Ry4an Brase    schedule 20.12.2013
comment
Когда люди нажимают на ваше центральное хранилище через ssh, что хук запускается как их пользователь unix - это проблема! Ни у кого из нас нет индивидуальных учетных записей пользователей Linux на этом компьютере. Безопасен ли закрытый SSH-ключ без пароля? - person DOOManiac; 21.12.2013
comment
безопасность относительная. Закрытый ключ без пароля означает, что любой, кто найдет этот файл (или ноутбук, на котором он находится), может получить доступ к учетной записи. Если это кажется вам безопасным (а в некоторых случаях так и будет), то это ваш ответ. - person Ry4an Brase; 27.12.2013