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'부분은 임의의 식별자이며 접두사를 사용자 이름 및 비밀번호와 일치시키는 데 사용됩니다. 다른 사이트에서 다른 사용자 이름 / 암호 콤보를 관리하는 데 편리합니다 (접두사)

사용자 이름 만 지정할 수 있으며 푸시 할 때 비밀번호를 입력하면됩니다.

또한 키링 확장을 살펴 보는 것이 좋습니다 . 암호는 일반 텍스트 파일 대신 시스템의 키 링에 암호를 저장하기 때문에 더 안전합니다. Windows에서 TortoiseHg와 함께 번들로 제공되며 현재 모든 플랫폼에서 번들 확장으로 배포하는 것에 대한 토론이 있습니다.


3
서버가 다음과 같은 경우 왜 작동하지 않습니까? ssh : // HGSERVER? "ssh : // username : password @ HGSERVER"형식도 작동하지 않습니다.
Oren

1
@Oren-아래 주석을보십시오-SSH를 사용한다면 왜 키 기반 로그인을 사용하지 않습니까?
David Eads

@santafebound 텍스트에서 알 수 있듯이 "임의"는 사용자 이름과 암호를 접두사와 연결하는 데만 사용되므로 사용자에게 적합한 태그를 제공하십시오.
Chris McCauley

나는 암호를 일반 텍스트로 저장하지 않는 것이 좋습니다 (이 답변은 더 나은 대안을 간단히 언급 하더라도이 답변이하는 것입니다).
재스퍼

170

이를 수행하는 세 가지 방법이 있습니다. .hgrc 파일 사용, ssh 사용 또는 키링 확장 사용


1. INSECURE 방법-~ / .hgrc 파일을 업데이트하십시오

나를 위해 작동하는 형식은 ~ / .hgrc 파일입니다.

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

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


고유 한 태그를 추가하여 접두사, 사용자 이름, 비밀번호의 3 중 트립을 더 추가하여 원하는만큼 리포지토리를 구성 할 수 있습니다.

이것은 Mercurial 1.3에서만 작동하며 사용자 이름과 비밀번호는 일반 텍스트로되어 있습니다-좋지 않습니다.


2. 안전한 방법-비밀번호를 사용하여 SSH를 사용하지 않기

Mercurial은 SSH를 완벽하게 지원하므로 비밀번호없이 서버에 로그인 할 수있는 SSH의 기능을 활용할있습니다 . 자체 생성 된 인증서를 제공하기 위해 구성을 한 번만 수행하십시오. 이것은 당신이 원하는 것을하는 가장 안전한 방법입니다.


비밀번호없는 로그인 구성에 대한 자세한 내용은 여기를 참조하십시오.


3. 열쇠 고리 확장

보안 옵션을 원하지만 SSH에 익숙하지 않은 경우이 방법을 시도해보십시오.

문서에서 ...

확장 프로그램은 기본적으로 수행되는 것처럼 원격 저장소에 대한 첫 번째 끌어 오기 / 푸시에서 HTTP 암호를 입력하라는 메시지를 표시하지만 암호 데이터베이스에 암호 (사용자 이름과 원격 저장소 URL의 조합으로 입력)를 저장합니다. 다음 실행시에는 .hg / hgrc에서 사용자 이름을 확인한 다음 암호 데이터베이스에서 적합한 암호를 확인하고 해당 자격 증명이있는 경우 해당 자격 증명을 사용합니다.

여기에 더 자세한 정보가 있습니다


3
Satoru, Chris는 수은에 대해 이야기하는 것이 아니라 ssh에 대해 이야기하고 있습니다. ssh는 암호를 사용하여 자신을 식별 할 필요가 없도록 설정할 수 있습니다 (예 : debian-administration.org/articles/152 ).
Tomislav Nakic-Alfirevic

4
방법 2는 실제로 사물을 안전하게 처리하고 원격 시스템에서 사용자 수준 권한을 유지 하는 유일한 방법입니다.
Peter Rowell

2
키링 통합 사용에 대한 user570626의 답변이이 중 하나보다 훨씬 낫습니다. @Peter Rowell : ssh 설정은 몇 명의 사용자와 리포지토리가있는 경우 큰 고통입니다. 로컬 유닉스 사용자가 필요하며 .ssh / authorized_keys 및 셸 래퍼로 실행할 수있는 명령을 제한해야합니다. 깨끗한 솔루션이 아닙니다.
Draemon

5
@ 피터 로웰 : 1. 그 차이는 무엇입니까? 나는 그의 해결책이 더 빠르지 않다고 말했다. 2. 호스팅 환경과는 아무런 관련이 없으며 순전히 클라이언트 측입니다 (SSH 솔루션과 달리이를 지원하기 위해 서버 측에서 변경해야 함). 3. 트롤링과 자랑에 대한 글로, 나는 여전히 그것이 깨끗한 해결책이 아니라고 말합니다. 로컬 사용자가 필요하며 쉘 액세스 권한을 부여한 다음 제한해야합니다. 쉘 액세스가 항상 합리적인 옵션은 아닙니다. 귀하의 경험 중 누군가가 서비스 셸 액세스를 제공하지 않으려는 시스템 관리자를 만나지 않은 것에 놀랐습니다.
Draemon

2
@Draemon : 다른 경험이 있다고 생각합니다. 개인적으로, 저는 쉘 프롬프트가없는 시스템에서 작업하지 않을 것입니다. 다른 시스템에 전적으로 의존하여 필요한 것을 이미 설치했습니다. 내 일반적인 경험은 프롬프트가 표시되지 않으면 워크 플로의 기본으로 간주되는 다른 서비스를 거의 얻을 수 없다는 것입니다. 다른 사람들에 대한 다른 (핵심) 스트로크.
피터 로웰

65

키링 확장에 대해서는 언급 한 사람이 없습니다. 사용자 이름과 비밀번호를 시스템 키링에 저장합니다. 이는 위에서 언급 한 것처럼 비밀번호를 정적 파일에 저장하는 것보다 훨씬 안전합니다. 아래 단계를 수행하면 좋습니다. 나는 이것을 약 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


1
이것이 내가 가장 좋아하는 솔루션입니다. ... 그리고 @hadrien이 말한 것을 두 번째로, 설명 된 세 가지 조치 후에 Mac OS X의 매력처럼 작동합니다.
ngeek

나도 두 번째 @ngeek!
Hadrien

Windows에서는 최소한 TortoiseHg 가 키링 확장을 지원합니다. 전역 설정-> 확장-> mercurial_keyring
user272735

불행히도 현재 키링 확장 프로그램은 Windows에서 한 번에 하나의 암호 만 저장할 수있는 버그가 있습니다. 이 질문을 참조하십시오 .
Laurens Holst

이것은 최고의 솔루션처럼 보이지만 OSX에서 사용하려고하면 키 체인에서 암호를 얻으려고 할 때 파이썬 segfault가 발생합니다.
Isaac

30

간단한 해킹은 프로젝트 .hg/hgrc파일 의 푸시 URL에 사용자 이름과 비밀번호를 추가하는 것입니다 .

[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/


나는 그러나, 확장을 다운로드, 내가 암호 프롬프트 날 :( 나는 그것을 내가 전에 그놈 열쇠 고리를 사용한 적이 길을 잘못했을 수 있음 전달할 수 있도록 거부 푸시 만들려고 할 때 모두 같은 감사합니다.을..
satoru

무슨 일이 일어나고 있는지보기 위해 --debug 및 --verbose 옵션을 사용하고 싶을 수도 있습니다.
Roberto Aloi

ssh를 사용하는 경우 암호를 입력 할 필요가 없습니다. 이것이 바로 열쇠입니다
beauXjames

물론 공개 키를 얻을 수있는 고급 장치가 있다고 가정하십시오.
David 주어진

23

위의 NOBODY는 초보자 사용자에게 설명 / 명명 된 용어입니다. 그들은 용어로 혼란스러워합니다.

.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의 사용자 홈 디렉토리) 또는 Windows의 mercurial.ini (사용자 홈 디렉토리)에있는 경우 다음 행을 포함합니다.

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

그러면 http repo 링크 당 사용자 자격 증명을 입력하라는 메시지가 표시되지 않습니다. [extensions] 아래의 ~ / .hgrc에 "mercurial_keyring ="또는 "hgext.mercurial_keyring = /path/to/your/mercurial_keyring.py"줄이 있습니다.이 줄 중 하나가 있어야합니다.

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

사용자가 사용자 이름 / 암호 프롬프트없이 http : // .... / ...에서 언급 한 것에 대해 걱정하지 않고 Hg 작업을 복제하거나 수행 할 수 있도록 PREFIX 속성을 설정하는 방법을 찾으려고합니다. Hg repo 링크를 사용하는 동안 servername. IP, 서버 이름 또는 서버의 FQDN 일 수 있습니다.


4

MacPorts를 사용하여 Mac OSX에 mercurial_keyring 설치 :

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 =

이 명령을 실행하고 .hgrc 파일을 업데이트 한 후 TortoiseHg에 "mercurial_keyring이라는 모듈이 없습니다"라는 메시지가 나타납니다.
Dunc

여기에 설명 된대로 올바른 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

도움이 되었기를 바랍니다.


0

귀하의 상황에서 작동하거나 작동하지 않을 수 있지만 Putty 's Pageant를 사용하여 공개 / 개인 키를 생성하는 것이 유용하다는 것을 알았습니다.

bitbucket (.org)을 사용하는 경우 사용자 계정에 공개 키를 제공 할 수있는 기능을 제공해야하며 리포지토리에 도달하는 명령은 자동으로 보호됩니다.

재부팅시 Pageant가 시작되지 않으면 Windows "시작 메뉴"에 Pageant 바로 가기를 추가 할 수 있으며 바로 가기에는 개인 (.ppk) 파일의 위치로 채워진 '속성'이 필요할 수 있습니다. .

이를 통해 Mercurial과 로컬 리포지토리를 SSH 형식을 사용하여 푸시 / 풀로 설정해야합니다.

다음은 Atlassian 의 Windows 또는 Mac / Linux 용 사이트에 대한 자세한 지침입니다 .

당신은 그것에 대해 내 말을 할 필요가 없으며 그것을 할 다른 방법은 의심의 여지가 없습니다. 여기설명 된 이 단계 가 더 적합 할 수 있습니다.

  1. PuttyGen 시작-> PuTTY-> PuttyGen 시작
  2. 새 키를 생성하고 암호없이 .ppk 파일로 저장
  3. 퍼티를 사용하여 연결하려는 서버에 로그인하십시오
  4. PuttyGen의 공개 키 텍스트를 ~ / .ssh / authorized_keys의 텍스트에 추가
  5. 시작-> 퍼티에서 시작-> 시작으로 .ppk 파일의 바로 가기를 만듭니다.
  6. 시작 메뉴에서 .ppk 바로 가기를 선택하십시오 (시작할 때마다 자동으로 수행됨)
  7. 시스템 트레이의 미인 대회 아이콘을 참조하십시오? 마우스 오른쪽 버튼으로 클릭하고 "새 세션"을 선택하십시오.
  8. “호스트 이름”필드에 username @ hostname을 입력하십시오
  9. 이제 자동으로 로그인합니다.

0

키링 확장을 사용하십시오. mercurial.ini 파일에 아래 항목을 추가하십시오.

[확장명] mercurial_keyring =

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.