จะบันทึกชื่อผู้ใช้และรหัสผ่านด้วย 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: // ชื่อผู้ใช้: รหัสผ่าน @ HGSERVER" ไม่สามารถใช้งานได้เช่นกัน ..
Oren

1
@Oren - ดูความคิดเห็นด้านล่าง - หากคุณใช้ SSH ทำไมไม่ใช้การเข้าสู่ระบบด้วยคีย์
David Eads

@santafebound ตามที่ข้อความระบุไว้มัน "โดยพลการ" และใช้เพื่อเชื่อมโยงชื่อผู้ใช้และรหัสผ่านกับคำนำหน้าเท่านั้นดังนั้นให้ระบุแท็กที่เหมาะสมกับคุณ
Chris McCauley

ฉันไม่แนะนำให้เก็บรหัสผ่านในรูปแบบข้อความล้วน (ซึ่งเป็นสิ่งที่คำตอบนี้ทำแม้ว่าจะเป็นทางเลือกที่ดีกว่าก็ตาม)
แจสเปอร์

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


คุณสามารถกำหนดค่า repos ได้มากเท่าที่คุณต้องการโดยเพิ่มคำนำหน้าชื่อผู้ใช้และรหัสผ่านจำนวนสามส่วนโดยเพิ่มแท็กที่ไม่ซ้ำกัน

ใช้งานได้ใน Mercurial 1.3 เท่านั้นและแน่นอนว่าชื่อผู้ใช้และรหัสผ่านของคุณเป็นข้อความธรรมดา - ไม่ดี


2. วิธีที่ปลอดภัย - ใช้ SSH เพื่อหลีกเลี่ยงการใช้รหัสผ่าน

Mercurial สนับสนุน SSH อย่างเต็มที่ดังนั้นเราจึงสามารถใช้ประโยชน์จากความสามารถของ SSH ในการเข้าสู่เซิร์ฟเวอร์โดยไม่ต้องใช้รหัสผ่าน - คุณทำการกำหนดค่าปิดเพียงครั้งเดียวเพื่อให้ใบรับรองที่สร้างขึ้นเอง นี่เป็นวิธีที่ปลอดภัยที่สุดในการทำสิ่งที่คุณต้องการ


คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าการเข้าสู่ระบบแบบไม่มีรหัสผ่านได้ที่นี่


3. การขยายพวงกุญแจ

หากคุณต้องการตัวเลือกที่ปลอดภัย แต่ไม่คุ้นเคยกับ SSH ทำไมไม่ลองสิ่งนี้

จากเอกสาร ...

ส่วนขยายจะพร้อมท์ให้ใส่รหัสผ่าน HTTP ในการดึง / ดันไปยัง / จากที่เก็บระยะไกลที่กำหนด (เหมือนกับที่ทำตามค่าเริ่มต้น) แต่จะบันทึกรหัสผ่าน (คีย์โดยการรวมกันของชื่อผู้ใช้และ URL ที่เก็บระยะไกล) ในฐานข้อมูลรหัสผ่าน ในการเรียกใช้ครั้งต่อไปจะตรวจสอบชื่อผู้ใช้ใน. hg / hgrc จากนั้นค้นหารหัสผ่านที่เหมาะสมในฐานข้อมูลรหัสผ่านและใช้ข้อมูลรับรองเหล่านั้นหากพบ

มีข้อมูลรายละเอียดเพิ่มเติมที่นี่


3
Satoru, Chris ไม่ได้พูดถึง mercurial แต่สามารถตั้งค่า ssh: ssh เพื่อให้คุณไม่ต้องระบุตัวเองด้วยรหัสผ่าน (ตามที่อธิบายไว้ที่นี่: debian-administr.org/articles/152 )
Tomislav Nakic-Alfirevic

4
วิธีที่ 2 เป็นวิธีเดียวที่จะจัดการสิ่งต่าง ๆ อย่างปลอดภัยและรักษาสิทธิ์ระดับผู้ใช้ในระบบระยะไกล
Peter Rowell

2
คำตอบของ user570626 เกี่ยวกับการใช้การรวมพวงกุญแจนั้นดีกว่าทั้งสองอย่างมาก @Peter Rowell: การตั้งค่า ssh เป็นความเจ็บปวดที่แท้จริงหากคุณมีผู้ใช้และที่เก็บน้อย คุณต้องการผู้ใช้งานยูนิกซ์โลคัลและต้องทำใจให้เข้มงวดด้วยการ จำกัด คำสั่งที่สามารถรันด้วย. ssh / authorized_keys และ shell wrapper ไม่ใช่ทางออกที่สะอาด
Draemon

5
@ Peter Rowell: 1. อะไรที่ทำให้แตกต่าง? ฉันบอกว่าวิธีแก้ปัญหาของเขาดีกว่าไม่ช้า 2. มันไม่เกี่ยวกับสภาพแวดล้อมการโฮสต์มันเป็นฝั่งไคลเอ็นต์ล้วนๆ (ต่างจากโซลูชัน SSH ของคุณซึ่งต้องมีการเปลี่ยนแปลงทางฝั่งเซิร์ฟเวอร์เพื่อสนับสนุน) 3. มันวาวกว่าการหมุนรอบและการโม้ฉันยังคงบอกว่ามันไม่ใช่ทางออกที่สะอาด คุณต้องการผู้ใช้ท้องถิ่นและคุณต้องให้สิทธิ์การเข้าถึงเชลล์แก่พวกเขาจากนั้น จำกัด การเข้าถึงเชลล์ไม่ใช่ตัวเลือกที่สมเหตุสมผลเสมอไป ฉันประหลาดใจที่บางคนในประสบการณ์ของคุณไม่เจอดูแลระบบที่ไม่ต้องการให้สิทธิ์การเข้าถึงเชลล์เซอร์วิสของคุณ
Draemon

2
@ มังกร: ฉันคิดว่าเรามีประสบการณ์ที่แตกต่าง โดยส่วนตัวแล้วฉันจะไม่ทำงานบนระบบที่ไม่มี shell prompt มันทำให้ฉันต้องพึ่งพาระบบอื่นอย่างสมบูรณ์เพื่อติดตั้งสิ่งที่ฉันต้องการแล้ว ประสบการณ์ทั่วไปของฉันคือถ้าฉันไม่ได้รับพร้อมท์ฉันแทบจะไม่สามารถรับบริการอื่น ๆ ที่ฉันคิดว่าเป็นพื้นฐานสำหรับกระบวนการทำงานของฉัน จังหวะ (คีย์) ที่แตกต่างกันสำหรับคนต่าง ๆ
Peter Rowell

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
นี่คือทางออกที่ฉันโปรดปราน ... และเพียงแค่สองสิ่งที่ @hadrien กล่าวว่าหลังจากที่ได้อธิบายไว้สามการกระทำมันทำงานเช่นเสน่ห์บน Mac OS X ได้
ngeek

ฉันยัง @ngeek อันดับสองเพื่อรองฉัน!
Hadrien

บน Windows อย่างน้อยTortoiseHgรองรับการขยายพวงกุญแจ: การตั้งค่าส่วนกลาง -> ส่วนขยาย -> mercurial_keyring
272735

น่าเสียดายที่ปัจจุบันส่วนขยายของพวงกุญแจมีข้อผิดพลาดบน Windows ซึ่งสามารถบันทึกรหัสผ่านได้ครั้งละหนึ่งรายการเท่านั้น ดูคำถามนี้
Laurens Holst

ดูเหมือนว่าจะเป็นทางออกที่ดีที่สุด แต่เมื่อฉันพยายามที่จะใช้มันใน OSX, python segfaults เมื่อพยายามรับรหัสผ่านจากพวงกุญแจ
ไอแซ

30

การแฮ็กแบบง่าย ๆ คือการเพิ่มชื่อผู้ใช้และรหัสผ่านไปยัง URL การพุชใน.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 มาก่อนขอบคุณทุกคน
satoru

คุณอาจต้องการใช้ --debug และ - ตัวเลือก verbose สำหรับ hg push เพื่อดูว่าเกิดอะไรขึ้น ...
Roberto Aloi

ที่สมบูรณ์แบบสำหรับกรณีที่อยู่ในมือ ... ถ้าคุณกำลังใช้ SSH คุณไม่จำเป็นต้องผ่านในรหัสผ่าน ... นั่นคือสิ่งที่คีย์สำหรับ
beauXjames

สมมติว่าคุณมีอุปกรณ์หรูหราที่คุณสามารถปลดล็อคกุญแจสาธารณะได้
เดวิดให้

23

ไม่มีใครข้างต้นอธิบาย / ชี้แจงข้อกำหนดให้กับผู้ใช้มือใหม่ พวกเขาสับสนกับข้อกำหนด

.hg / hgrc - ไฟล์นี้ใช้สำหรับพื้นที่เก็บข้อมูลที่โลคัล / พื้นที่ทำงาน / ในโฟลเดอร์. hg ของที่เก็บจริง

~ / .hgrc - ไฟล์นี้แตกต่างจากไฟล์ด้านล่าง ไฟล์นี้อยู่ที่ ~ หรือไดเรกทอรีบ้าน

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

นี่คือหนึ่งในบรรทัดภายใต้ [รับรองความถูกต้อง] ส่วน / คำสั่งในขณะที่ใช้ส่วนขยาย Mercurial Keyring ตรวจสอบให้แน่ใจว่าชื่อเซิร์ฟเวอร์ที่คุณใส่ตรงกับสิ่งที่คุณใช้ในขณะที่ทำ "hg clone" ไม่เช่นนั้น keyring จะพูดว่าไม่พบผู้ใช้ 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 repo ใน ~ / .hgrc ภายใต้ [ส่วนขยาย] บรรทัดสำหรับ "mercurial_keyring =" หรือ "hgext.mercurial_keyring = /path/to/your/mercurial_keyring.py" .. หนึ่งในบรรทัดเหล่านี้ควรอยู่ที่นั่น

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

ฉันพยายามค้นหาวิธีการตั้งค่าคุณสมบัติคำนำหน้าเพื่อให้ผู้ใช้สามารถโคลนหรือดำเนินการ Hg ใด ๆ โดยไม่ต้องแจ้งชื่อผู้ใช้ / รหัสผ่านและไม่ต้องกังวลเกี่ยวกับสิ่งที่เขากล่าวถึงใน http: // .... / ... สำหรับ ชื่อเซิร์ฟเวอร์ขณะใช้ลิงค์ Hg repo สามารถเป็น IP, ชื่อเซิร์ฟเวอร์หรือ FQDN ของเซิร์ฟเวอร์


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 =

ฉันได้รับ "ไม่มีโมดูลชื่อ mercurial_keyring" ใน TortoiseHg หลังจากเรียกใช้คำสั่งเหล่านี้และอัปเดตไฟล์. hgrc ของฉัน
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

หากคุณกำลังทำงานกับ bitbucket (.org) ก็ควรให้ความสามารถในการมอบรหัสสาธารณะให้กับบัญชีผู้ใช้ของคุณจากนั้นคำสั่งที่เข้าถึงพื้นที่เก็บข้อมูลจะได้รับการรักษาความปลอดภัยโดยอัตโนมัติ

หาก Pageant ไม่ได้เริ่มต้นสำหรับคุณเมื่อรีบูตคุณสามารถเพิ่มทางลัดไปยัง Pageant ลงใน Windows ของคุณ "เมนู Start" และทางลัดอาจต้องมี 'คุณสมบัติ' บรรจุด้วยตำแหน่งของไฟล์ส่วนตัว (.ppk) ของคุณ .

ด้วยสิ่งนี้ Mercurial และที่เก็บข้อมูลในพื้นที่ของคุณจะต้องตั้งค่าให้กด / ดึงโดยใช้รูปแบบ SSH

นี่คือคำแนะนำโดยละเอียดเกี่ยวกับเว็บไซต์Atlassianสำหรับ Windows หรือ Mac / Linux

คุณไม่ต้องใช้คำพูดของฉันมันและไม่มีข้อสงสัยวิธีอื่นที่จะทำ บางทีขั้นตอนเหล่านี้ที่อธิบายไว้ที่นี่อาจมีมากกว่าสำหรับคุณ:

  1. เริ่ม PuttyGen จาก Start -> PuTTY-> PuttyGen
  2. สร้างคีย์ใหม่และบันทึกเป็นไฟล์. pkk โดยไม่มีข้อความรหัสผ่าน
  3. ใช้ Putty เพื่อเข้าสู่เซิร์ฟเวอร์ที่คุณต้องการเชื่อมต่อ
  4. ผนวกข้อความสาธารณะคีย์จาก PuttyGen ไปที่ข้อความของ ~ / .ssh / authorized_keys
  5. สร้างทางลัดไปยังไฟล์. pkk ของคุณจาก Start -> Putty to Start -> Startup
  6. เลือกทางลัด. pkk จากเมนูเริ่มต้น (สิ่งนี้จะเกิดขึ้นโดยอัตโนมัติทุกครั้งที่เริ่มต้น)
  7. เห็นไอคอนประกวดในถาดระบบหรือไม่ คลิกขวาและเลือก“ เซสชันใหม่”
  8. ป้อนชื่อผู้ใช้ @ hostname ในช่อง "ชื่อโฮสต์"
  9. ตอนนี้คุณจะเข้าสู่ระบบโดยอัตโนมัติ

0

ใช้ส่วนขยายของพวงกุญแจ เพิ่มรายการด้านล่างลงในไฟล์ mercurial.ini

[ส่วนขยาย] mercurial_keyring =

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.