Mercurialでユーザー名とパスワードを保存する方法は?


269

私は個人的なプロジェクトでMercurialを使用しており、サーバーに何かをプッシュするたびにユーザー名とパスワードを入力してきました。

.hgrcホームディレクトリのファイルに以下を追加してみましたが、完全に無視されているようです。

[ui]
username = MY_USER_NAME
password = MY_PASSWORD

これを正しい方法で行うには?

回答:


328

.hgrcまたはMercurial.iniファイルにauthセクションを作成できます。

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

「bb」の部分は任意の識別子であり、接頭辞をユーザー名とパスワードと照合するために使用されます-異なるサイトで異なるユーザー名/パスワードの組み合わせを管理するのに便利です(接頭辞)

ユーザー名のみを指定することもでき、プッシュするときにパスワードを入力するだけです。

また、キーリング拡張機能を確認することをお勧めします。パスワードはプレーンテキストファイルではなくシステムのキーリングに保存されるため、より安全です。WindowsではTortoiseHgにバンドルされており、現在、すべてのプラットフォームでバンドルされた拡張機能として配布することについての議論があります。


3
サーバーがssh:// HGSERVERの場合、これが機能しないのはなぜですか?「SSH://ユーザー名:パスワードHGSERVER @」形式はどちらか..動作しません
オレン

1
@Oren-以下のコメントを見てください-SSHを使用している場合は、キーベースのログインを使用しないのはなぜですか?
David Eads、2010

@santafeboundテキストが言うように、その「任意」であり、ユーザー名とパスワードを接頭辞に関連付けるためにのみ使用されるため、意味のあるタグを提供します。
Chris McCauley 2017

私は本当にパスワードをプレーンテキストで保存することをお勧めしません(これは、より良い代替案についても簡単に言及している場合でも、この回答が行うことです)。
ジャスパー

170

これを行うには、3つの方法があります。.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


一意のタグを前に付けて、3組の接頭辞、ユーザー名、パスワードを追加することで、必要な数のリポジトリを構成できます。

これはMercurial 1.3でのみ機能し、明らかにユーザー名とパスワードはプレーンテキストです。


2.安全な方法-パスワードを使用してSSHを使用して回避する

MercurialはSSHを完全にサポートしているため、パスワードなしでサーバーにログインできるSSHの機能を利用できます。自己生成の証明書を提供するには、一度設定するだけです。これは、あなたが望むことをするための最も安全な方法です。


パスワードなしのログインの 設定について詳しくは、こちらをご覧ください


3.キーリング拡張

安全なオプションが必要だが、SSHに慣れていない場合は、これを試してみませんか?

ドキュメントから...

拡張機能は、指定されたリモートリポジトリへの最初のプル/プッシュ(デフォルトで行われるのと同じ)でHTTPパスワードの入力を求めますが、パスワード(ユーザー名とリモートリポジトリのURLの組み合わせによってキーが付けられます)をパスワードデータベースに保存します。次回の実行時に、.hg / hgrcでユーザー名をチェックし、次にパスワードデータベースで適切なパスワードをチェックし、見つかった場合はそれらの資格情報を使用します。

ここに詳細情報があります


3
サトル、クリスは水銀について話しているのではなく、sshについて話している:sshは、パスワードを使用して自分を識別する必要がないように設定できる(たとえば、ここで説明しているように、debian-administration.org / articles / 152)。
Tomislav Nakic-Alfirevic 2010

4
方法2は、物事を安全に処理し、リモートシステムでユーザーレベルのアクセス許可を維持するための実際の唯一の方法です。
Peter Rowell、2010

2
キーリング統合の使用に関するuser570626の回答は、これらのどちらよりもはるかに優れています。@Peter Rowell:少数のユーザーとリポジトリがある場合、sshの設定は本当に大変です。ローカルのUNIXユーザーが必要で、.ssh / authorized_keysとシェルラッパーで実行できるコマンドを制限する必要があります。完全にクリーンなソリューションではありません。
ドラえもん

5
@ピーター・ローウェル:1.その違いは何ですか?私は彼の解決策が早くない方がいいと言った。2.ホスティング環境とは関係なく、純粋にクライアント側です(サポートするためにサーバー側で変更が必要なSSHソリューションとは異なります)。3.荒らしや自慢をつぶやく、それでもクリーンな解決策ではないと私は言います。あなたはローカルユーザーを必要とし、彼らにシェルアクセスを与えそしてそれを制限しなければなりません。シェルアクセスは常に賢明なオプションではありません。あなたの経験の誰かが、あなたのサービスにシェルアクセスを与えたくないシステム管理者に出会っていないことに驚いています。
ドラえもん

2
@Draemon:私たちはさまざまな経験をしていると思います。個人的には、シェルプロンプトがないシステムでは動作しません。必要なものをすでにインストールしているので、他のシステムに完全に依存します。私の一般的な経験では、プロンプトが表示されない場合、ワークフローの基本であると考えられる他のサービスをほとんど確実に取得できません。人によって異なる(キー)ストローク。
Peter Rowell、2011年

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


1
これが私のお気に入りのソリューションです。...と、ちょうど第二に、それは、Mac OS X上で魔法のように動作の3つのアクションで説明した後、言っ@hadrien
ngeek

@ngeekも2人目です。
Hadrien、2011

Windowsでは、少なくともTortoiseHgはキーリング拡張をサポートしています:グローバル設定->拡張-> mercurial_keyring
user272735

残念ながら、現在のところキーリング拡張機能にはWindowsにバグがあり、一度に1つのパスワードしか保存できません。この質問を参照してください。
Laurens Holst

これは最善の解決策のようですが、OSXで使用しようとすると、キーチェーンからパスワードを取得しようとするとpython segfaultが発生します。
アイザック

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キーリングを統合する方法を説明します。

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


私は、プロンプトパスワードは私が:(私はそれを間違った方向に行っていることかもしれ通過させることを拒否プッシュを作るしようとしたとき、しかし、拡張をダウンロードして、私は前にGnomeのキーリングを使用したことがないすべて同じありがとう。。。
さと

hg pushに--debugおよび--verboseオプションを使用して、何が問題なのかを確認したい場合があります...
Roberto Aloi

手元のケースに最適... sshを使用している場合は、パスワードを渡す必要はありません...それがキーの目的です
beauXjames

もちろん、あなたが公開鍵を取得できる贅沢なデバイスを持っていると仮定します。
デビッドギブン

23

上記のNOBODYは、初心者ユーザーに用語を説明/明確化しました。彼らは用語に混乱する

.hg / hgrc-このファイルは、実際のリポジトリの.hgフォルダー内のローカル/ワークスペースの場所にあるリポジトリに使用されます。

〜/ .hgrc-このファイルは以下のものとは異なります。このファイルは〜またはホームディレクトリにあります。

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

これは、[auth]セクション/ディレクティブの下の行の1つであり、Mercurialキーリング拡張を使用しています。そこに置くサーバー名が「hg clone」の実行中に使用するサーバー名と一致することを確認してください。一致しない場合、ユーザーが見つからないため、キーリングが表示します。以下の行のbbまたはmyremoteは、「hg clone http:/.../../ repo1 bb or myremote」を実行するときに指定する必要がある「エイリアス名」です。それ以外の場合は機能しないか、ローカルを確認する必要がありますリポジトリの.hg / hgrcファイルには同じエイリアスが含まれています(つまり、最後のパラメーターとしてhg cloneを実行中に指定したもの)。

PS明確な詳細については以下のリンク、すぐに書かれた文法については申し訳ありません。

例:〜/ .hgrc(Linux / Unixではユーザーのホームディレクトリ)またはWindowsではユーザーのホームディレクトリにあるmercurial.ini内に次の行が含まれている場合、

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

の場合、httpリポジトリリンクごとに2回以上ユーザー認証情報の入力を求められることはありません。〜/ .hgrcの[extensions]の下に、 "mercurial_keyring ="または "hgext.mercurial_keyring = /path/to/your/mercurial_keyring.py" ..の行があります。これらの行の1つがそこにあるはずです。

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

ユーザーがユーザー名/パスワードのプロンプトなしで、またhttp:// .... / ... 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という名前のモジュールはありません」と表示されます。
2015年

ここで説明するように、あなたは右のPythonのバージョンを持っていることを確認してください:stackoverflow.com/questions/5173197/...
PHM

2

TortoiseHgを使用している場合は、添付のスクリーンショットに示す3つの手順を実行する必要があります。これにより、使用している特定のリポジトリの資格情報が追加されます。

ここに画像の説明を入力してください

グローバル設定を追加するには、C:\ users \ user.name \ mercurial.iniファイルにアクセスしてセクションを追加します

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

お役に立てれば。


0

状況によっては機能する場合と機能しない場合がありますが、PuttyのPageantを使用して公開鍵/秘密鍵を生成すると便利です。

bitbucket(.org)も使用している場合は、ユーザーアカウントに公開鍵を提供する機能が提供され、リポジトリに到達するコマンドが自動的に保護されます。

再起動時にPageantが起動しない場合は、PageantへのショートカットをWindowsの「スタートメニュー」に追加できます。ショートカットには、プライベート(.ppk)ファイルの場所が設定された「プロパティ」が必要な場合があります。 。

これを使用して、Mercurialとローカルリポジトリは、SSH形式を使用してプッシュ/プルするように設定する必要があります。

WindowsまたはMac / Linux向けのAtlassianのサイトでの詳細な手順を以下に示します。

あなたはそれを私の言葉にする必要はありませんし、間違いなく他の方法があります。おそらく、ここで説明されているこれらのステップあなたのためのものです:

  1. スタートからPuttyGenを開始-> PuTTY-> PuttyGen
  2. 新しいキーを生成し、パスフレーズなしで.ppkファイルとして保存します
  3. Puttyを使用して、接続するサーバーにログインします。
  4. PuttyGenからの公開鍵テキストを〜/ .ssh / authorized_keysのテキストに追加します
  5. Start-> Putty to Start-> Startupから.ppkファイルへのショートカットを作成します。
  6. スタートアップメニューから.ppkショートカットを選択します(これはすべての起動時に自動的に行われます)。
  7. システムトレイのページェントアイコンを確認しますか?それを右クリックして「新しいセッション」を選択します
  8. 「ホスト名」フィールドにユーザー名@ホスト名を入力します
  9. 自動的にログインします。

0

キーリング拡張を使用します。以下のエントリをmercurial.iniファイルに追加します。

[拡張機能] mercurial_keyring =

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.