Bagaimana cara menyimpan nama pengguna dan kata sandi dengan Mercurial?

269

Saya menggunakan Mercurial dalam proyek pribadi, dan saya telah mengetik nama pengguna dan kata sandi setiap kali saya ingin mendorong sesuatu ke server.

Saya mencoba menambahkan yang berikut ke .hgrcfile di direktori home saya, tetapi tampaknya diabaikan sepenuhnya.

[ui]
username = MY_USER_NAME
password = MY_PASSWORD

Bagaimana cara melakukannya dengan cara yang benar?

satoru
sumber

Jawaban:

328

Anda dapat membuat bagian auth di Anda .hgrcatau Mercurial.iniberkas, seperti jadi:

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

Bagian 'bb' adalah pengidentifikasi arbitrer dan digunakan untuk mencocokkan awalan dengan nama pengguna dan kata sandi - berguna untuk mengelola kombo nama pengguna / kata sandi yang berbeda dengan situs yang berbeda (awalan)

Anda juga hanya dapat menentukan nama pengguna, maka Anda hanya perlu mengetikkan kata sandi saat menekan.

Saya juga merekomendasikan untuk melihat ekstensi keyring . Karena menyimpan kata sandi di gantungan kunci sistem Anda alih-alih file teks biasa, ini lebih aman. Itu dibundel dengan TortoiseHg di Windows, dan saat ini ada diskusi tentang mendistribusikannya sebagai ekstensi yang dibundel pada semua platform.

Laurens Holst
sumber
3
Mengapa ini tidak berfungsi ketika servernya adalah: ssh: // HGSERVER? format "ssh: // username: password @ HGSERVER" tidak berfungsi baik ..
Oren
1
@ Oren - lihat komentar di bawah ini - jika Anda menggunakan SSH, mengapa tidak menggunakan login berbasis kunci?
David Eads
@santafebound Seperti yang tertulis dalam teks, "arbitrer" dan hanya digunakan untuk mengaitkan nama pengguna dan kata sandi dengan awalan, jadi berikan tag yang masuk akal bagi Anda.
Chris McCauley
Saya benar-benar tidak akan merekomendasikan menyimpan kata sandi dalam teks biasa (yang merupakan jawaban ini tidak, bahkan jika secara singkat juga menyebutkan alternatif yang lebih baik).
Jasper
170

Ada tiga cara untuk melakukan ini: gunakan file .hgrc, gunakan ssh atau gunakan ekstensi keyring


1. Cara INSECURE - perbarui file ~ / .hgrc Anda

Format yang berfungsi untuk saya (dalam file ~ / .hgrc saya) adalah ini

[ui]
username=Chris McCauley <[email protected]>

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


Anda dapat mengonfigurasi repo sebanyak yang Anda inginkan dengan menambahkan triplet lebih dari awalan, nama pengguna, kata sandi dengan menambahkan tag unik.

Ini hanya bekerja di Mercurial 1.3 dan jelas nama pengguna dan kata sandi Anda dalam teks biasa - tidak baik.


2. Cara aman - Gunakan SSH untuk MENGHINDARI menggunakan kata sandi

Mercurial sepenuhnya mendukung SSH sehingga kami dapat memanfaatkan kemampuan SSH untuk masuk ke server tanpa kata sandi - Anda melakukan konfigurasi sekali saja untuk memberikan sertifikat yang dihasilkan sendiri. Sejauh ini, ini adalah cara teraman untuk melakukan apa yang Anda inginkan.


Anda dapat menemukan informasi lebih lanjut tentang mengkonfigurasi login tanpa kata sandi di sini


3. Ekstensi keyring

Jika Anda menginginkan opsi yang aman, tetapi tidak terbiasa dengan SSH, mengapa tidak mencoba ini?

Dari dokumen ...

Ekstensi meminta kata sandi HTTP pada tarikan pertama / push ke / dari repositori jarak jauh yang diberikan (sama seperti dilakukan secara default), tetapi menyimpan kata sandi (dikunci oleh kombinasi nama pengguna dan url repositori jarak jauh) dalam basis data kata sandi. Pada jalankan berikutnya memeriksa nama pengguna di .hg / hgrc, lalu untuk kata sandi yang sesuai dalam database kata sandi, dan menggunakan kredensial tersebut jika ditemukan.

Ada informasi lebih rinci di sini

Chris McCauley
sumber
3
Satoru, Chris tidak berbicara tentang lincah, tetapi tentang ssh: ssh dapat diatur sehingga Anda tidak perlu mengidentifikasi diri Anda menggunakan kata sandi (seperti yang dijelaskan misalnya di sini: debian-administration.org/articles/152 ).
Tomislav Nakic-Alfirevic
4
Metode 2 adalah satu - satunya cara untuk menangani hal-hal dengan aman dan mempertahankan izin tingkat pengguna pada sistem jarak jauh.
Peter Rowell
2
jawaban pengguna570626 menggunakan integrasi keyring jauh lebih baik daripada salah satu dari ini. @Peter Rowell: ssh setup sangat merepotkan jika Anda memiliki beberapa pengguna dan repositori; Anda memerlukan pengguna unix lokal dan harus mengelabui dengan membatasi perintah yang dapat dijalankan dengan .ssh / official_keys dan pembungkus shell. Bukan solusi bersih.
Draemon
5
@ Peter Rowell: 1. apa bedanya? Saya katakan solusinya lebih baik tidak lebih cepat. 2. Ini tidak ada hubungannya dengan lingkungan hosting, itu murni sisi klien (tidak seperti solusi SSH Anda yang memerlukan perubahan di sisi server untuk mendukungnya). 3. Meluncur di atas trolling dan membual, saya masih mengatakan bahwa itu bukan solusi bersih. Anda memerlukan pengguna lokal dan Anda harus memberi mereka akses shell kemudian batasi itu. Akses shell tidak selalu merupakan pilihan yang masuk akal. Saya terkejut bahwa seseorang dari pengalaman Anda belum menemukan sysadmin yang tidak ingin memberikan akses layanan shell Anda.
Draemon
2
@Raemon: Saya rasa kami memiliki pengalaman yang berbeda. Secara pribadi, saya tidak akan bekerja pada sistem di mana saya tidak memiliki prompt shell. Itu membuat saya benar-benar bergantung pada sistem lain untuk sudah menginstal apa yang saya butuhkan. Pengalaman umum saya adalah bahwa jika saya tidak bisa mendapatkan prompt, saya hampir pasti tidak bisa mendapatkan layanan lain yang saya anggap penting untuk alur kerja saya. Stroke (kunci) yang berbeda untuk orang yang berbeda.
Peter Rowell
65

Tidak ada yang menyebutkan ekstensi keyring. Ini akan menyimpan nama pengguna dan kata sandi ke dalam keyring sistem, yang jauh lebih aman daripada menyimpan kata sandi Anda dalam file statis seperti yang disebutkan di atas. Lakukan langkah-langkah di bawah ini dan Anda harus melakukannya dengan baik. Saya menjalankan dan menjalankan ini di Ubuntu dalam waktu sekitar 2 menit.

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

pengguna570626
sumber
1
Ini solusi favorit saya. ... dan hanya sedetik apa yang dikatakan @hadrien, setelah tiga tindakan yang dijelaskan itu berfungsi seperti pesona pada Mac OS X.
ngeek
Saya juga @ngeek kedua untuk mendukung saya!
Hadrien
Pada Windows, setidaknya TortoiseHg mendukung ekstensi keyring: Pengaturan Global -> Ekstensi -> mercurial_keyring
user272735
Sayangnya saat ini ekstensi keyring memiliki bug di Windows di mana ia hanya dapat menyimpan satu kata sandi sekaligus. Lihat pertanyaan ini .
Laurens Holst
Ini sepertinya solusi terbaik, tetapi ketika saya mencoba menggunakannya di OSX, python segfaults ketika mencoba untuk mendapatkan kata sandi dari gantungan kunci.
Isaac
30

Peretasan sederhana adalah dengan menambahkan nama pengguna dan kata sandi ke url push di .hg/hgrcfile proyek Anda :

[paths]
default = http://username:[email protected]/myproject

(Perhatikan bahwa dengan cara ini Anda menyimpan kata sandi dalam teks biasa)

Jika Anda mengerjakan beberapa proyek di bawah domain yang sama, Anda mungkin ingin menambahkan aturan penulisan ulang di ~/.hgrcfile Anda , untuk menghindari pengulangan ini untuk semua proyek:

[rewrite]
http.//mydomain.com = http://username:[email protected]

Sekali lagi, karena kata sandi disimpan dalam teks biasa, saya biasanya menyimpan hanya nama pengguna saya.

Jika Anda bekerja di bawah Gnome, saya menjelaskan cara mengintegrasikan Mercurial dan Gnome Keyring di sini:

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

Roberto Aloi
sumber
Saya telah mengunduh ekstensi, namun, ketika saya mencoba mendorong prompt kata sandi menolak untuk membiarkan saya lewat :( Mungkin saya telah melakukannya dengan cara yang salah. Saya belum pernah menggunakan Gnome Keyring sebelumnya. Terima kasih semuanya.
satoru
Anda mungkin ingin menggunakan opsi --debug dan --verbose untuk hg push untuk melihat apa yang salah ...
Roberto Aloi
sempurna untuk kasus yang dihadapi ... jika Anda menggunakan ssh, Anda tidak perlu memasukkan kata sandi ... itulah kunci untuk
beauXjames
Dengan asumsi Anda memiliki kemewahan perangkat yang tentu saja bisa Anda dapatkan kunci publiknya.
David Diberi
23

NOBODY di atas menjelaskan / mengklarifikasi persyaratan kepada pengguna pemula. Mereka menjadi bingung dengan persyaratan

.hg / hgrc - file ini digunakan untuk Repository, di lokasi / workspace lokal / di folder .hg repositori yang sebenarnya.

~ / .hgrc - file ini berbeda dari yang di bawah ini. file ini berada di ~ atau direktori home.

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

Ini adalah salah satu baris di bawah bagian / arahan [auth], saat menggunakan ekstensi keyring mercurial. Pastikan nama server yang Anda letakkan di sana, cocok dengan apa yang Anda gunakan saat melakukan "hg clone" jika tidak maka keyring akan mengatakan, pengguna tidak ditemukan. bb atau myremote pada baris di bawah ini, adalah "alias nama" yang HARUS Anda berikan saat melakukan "hg clone http: /.../../ repo1 bb atau myremote" jika tidak, itu tidak akan berfungsi atau Anda harus memastikan lokal Anda File .hg / hgrc repositori berisi alias yang sama, yaitu (apa yang Anda berikan saat melakukan klon hg .. sebagai parameter terakhir).

PS tautan berikut untuk detail yang jelas, maaf untuk tata bahasa yang ditulis dengan cepat.

mis: Jika di dalam ~ / .hgrc (direktori home pengguna di Linux / Unix) atau mercurial.ini di Windows di direktori home pengguna, berisi, baris berikut dan jika Anda melakukannya

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

, maka Anda tidak akan pernah diminta kredensial pengguna lebih dari sekali per tautan repo http. Dalam ~ / .hgrc di bawah [extensions] sebuah baris untuk "mercurial_keyring =" atau "hgext.mercurial_keyring = /path/to/your/mercurial_keyring.py" .. salah satu baris ini harus ada di sana.

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

Saya mencoba mencari tahu cara mengatur properti PREFIX sehingga pengguna dapat mengkloning atau melakukan operasi Hg tanpa permintaan nama pengguna / kata sandi dan tanpa khawatir tentang apa yang ia sebutkan di http: // .... / ... for servername saat menggunakan tautan repo Hg. Itu bisa IP, servername atau FQDN server

AKS
sumber
4

instalasi mercurial_keyring pada Mac OSX menggunakan MacPorts:

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

Tambahkan yang berikut ke ~ / .hgrc:

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

[extensions]
mercurial_keyring =
ftvs
sumber
Saya mendapatkan "tidak ada modul bernama mercurial_keyring" di TortoiseHg setelah menjalankan perintah ini dan memperbarui file .hgrc saya.
Dunc
Pastikan Anda memiliki versi Python yang tepat, seperti dijelaskan di sini: stackoverflow.com/questions/5173197/…
phm
2

Jika Anda menggunakan TortoiseHg, Anda harus melakukan tiga langkah ini yang ditunjukkan pada tangkapan layar yang terlampir, ini akan menambah kredensial Anda untuk repositori spesifik yang Anda kerjakan.

masukkan deskripsi gambar di sini

Untuk menambahkan pengaturan global, Anda dapat mengakses file C: \ users \ user.name \ mercurial.ini dan menambahkan bagian

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

Semoga ini membantu.

AB
sumber
0

Meskipun mungkin atau mungkin tidak berfungsi dalam situasi Anda, saya merasa bermanfaat untuk membuat kunci publik / pribadi menggunakan Kontes Putty.

Jika Anda juga bekerja dengan bitbucket (.org), itu akan memberi Anda kemampuan untuk memberikan kunci publik ke akun pengguna Anda dan kemudian perintah yang menjangkau repositori akan diamankan secara otomatis.

Jika Pageant tidak memulai untuk Anda setelah reboot, Anda dapat menambahkan pintasan ke Pageant ke Windows Anda "Start menu" dan pintasan mungkin perlu memiliki 'properti' diisi dengan lokasi file pribadi (.ppk) Anda .

Dengan ini, Mercurial dan repositori lokal Anda perlu disetel untuk mendorong / menarik menggunakan format SSH.

Berikut adalah beberapa petunjuk terperinci di situs Atlassian untuk Windows OR Mac / Linux.

Anda tidak harus mengambil kata saya untuk itu dan tidak ada keraguan cara lain untuk melakukannya. Mungkin langkah-langkah yang dijelaskan di sini lebih untuk Anda:

  1. Mulai PuttyGen dari Mulai -> Putty-> PuttyGen
  2. Hasilkan kunci baru dan simpan sebagai file .ppk tanpa frasa sandi
  3. Gunakan Putty untuk masuk ke server yang ingin Anda sambungkan
  4. Tambahkan teks Kunci Publik dari PuttyGen ke teks ~ / .ssh / otor_keys
  5. Buat pintasan ke file .ppk Anda dari Mulai -> Putty ke Mulai -> Startup
  6. Pilih pintasan .ppk dari menu Startup (ini akan terjadi secara otomatis di setiap startup)
  7. Lihat ikon Kontes di baki sistem? Klik kanan dan pilih "Sesi baru"
  8. Masukkan nama pengguna @ nama host di bidang "Nama host"
  9. Anda sekarang akan masuk secara otomatis.
veTrain
sumber
0

Gunakan ekstensi keyring. Tambahkan entri di bawah ini ke file mercurial.ini.

[ekstensi] mercurial_keyring =

sudarsan - 406
sumber