Como salvar nome de usuário e senha com o Mercurial?

269

Usei o Mercurial em um projeto pessoal e tenho digitado meu nome de usuário e senha toda vez que desejo enviar algo ao servidor.

Tentei adicionar o seguinte ao .hgrcarquivo no meu diretório pessoal, mas ele parece ser completamente ignorado.

[ui]
username = MY_USER_NAME
password = MY_PASSWORD

Como fazer isso da maneira certa?

satoru
fonte

Respostas:

328

Você pode criar uma seção de autenticação no seu arquivo .hgrcou Mercurial.ini, da seguinte forma:

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

A parte 'bb' é um identificador arbitrário e é usada para combinar prefixo com nome de usuário e senha - útil para gerenciar combinações diferentes de nome de usuário / senha com sites diferentes (prefixo)

Você também pode especificar apenas o nome do usuário e precisará digitar sua senha ao pressionar.

Eu também recomendaria dar uma olhada na extensão do chaveiro . Como ele armazena a senha no conjunto de chaves do seu sistema em vez de um arquivo de texto sem formatação, é mais seguro. Ele vem com o TortoiseHg no Windows e, atualmente, há uma discussão sobre como distribuí-lo como uma extensão em todas as plataformas.

Laurens Holst
fonte
3
Por que isso não funciona quando o servidor é: ssh: // HGSERVER? o formato "ssh: // nome de usuário: senha @ HGSERVER" também não funciona ..
Oren
1
@Oren - veja o comentário abaixo - se você estiver usando SSH, por que não usar o login baseado em chave?
David Eads
@santafebound Como o texto diz, é "arbitrário" e é usado apenas para associar o nome de usuário e a senha ao prefixo, portanto forneça qualquer tag que faça sentido para você.
Chris McCauley
Eu realmente não recomendaria o armazenamento de senhas em texto simples (que é o que esta resposta faz, mesmo que também mencione brevemente uma alternativa melhor).
Jasper
170

Há três maneiras de fazer isso: use o arquivo .hgrc, use ssh ou use a extensão de chaveiro


1. A maneira INSECURE - atualize seu arquivo ~ / .hgrc

O formato que funciona para mim (no meu arquivo ~ / .hgrc) é este

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

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


Você pode configurar quantos repositórios desejar adicionando mais trigêmeos de prefixo, nome de usuário e senha, adicionando uma tag exclusiva.

Isso funciona apenas no Mercurial 1.3 e, obviamente, seu nome de usuário e senha estão em texto simples - não é bom.


2. A maneira segura - use SSH para EVITAR usando senhas

O Mercurial suporta totalmente o SSH, para que possamos tirar proveito da capacidade do SSH de fazer login em um servidor sem uma senha - você faz uma configuração única para fornecer um certificado auto-gerado. Essa é de longe a maneira mais segura de fazer o que você deseja.


Você pode encontrar mais informações sobre como configurar o login sem senha aqui


3. A extensão do chaveiro

Se você deseja uma opção segura, mas não conhece o SSH, por que não tentar isso?

Dos documentos ...

A extensão solicita a senha HTTP no primeiro pull / push de / para o repositório remoto fornecido (como é feito por padrão), mas salva a senha (digitada pela combinação de nome de usuário e URL do repositório remoto) no banco de dados de senhas. Na próxima execução, ele verifica o nome de usuário em .hg / hgrc, depois a senha adequada no banco de dados de senhas e usa essas credenciais, se encontradas.

Há informações mais detalhadas aqui

Chris McCauley
fonte
3
Satoru, Chris não está falando sobre mercurial, mas sobre ssh: ssh pode ser configurado para que você não precise se identificar usando uma senha (como descrito, por exemplo, aqui: debian-administration.org/articles/152 ).
Tomislav Nakic-Alfirevic 06/04/10
4
O método 2 é realmente a única maneira de lidar com as coisas com segurança e manter as permissões no nível do usuário no sistema remoto.
Peter Rowell
2
A resposta do usuário570626 de usar a integração do chaveiro é muito melhor do que qualquer um deles. @ Peter Rowell: a configuração do ssh é uma verdadeira dor de cabeça se você tiver alguns usuários e repositórios; você precisa de usuários unix locais e precisa se preocupar em restringir os comandos que podem ser executados com .ssh / allowed_keys e um wrapper de shell. Não é exatamente uma solução limpa.
Draemon
5
@ Peter Rowell: 1. que diferença isso faz? Eu disse que a solução dele era melhor não antes. 2. Não tem nada a ver com o ambiente de hospedagem, é apenas do lado do cliente (ao contrário da solução SSH, que requer alterações no lado do servidor para suportá-lo). 3. Falando sobre trollagem e vanglória, ainda digo que não é uma solução limpa. Você precisa de um usuário local e precisa conceder a ele acesso ao shell e depois restringir isso. O acesso ao shell nem sempre é uma opção sensata. Estou surpreso que alguém da sua experiência não tenha encontrado um administrador de sistema que não quisesse dar acesso ao seu shell de serviço.
Draemon
2
@ Demônio: Eu acho que temos experiências diferentes. Pessoalmente, não trabalharei em um sistema em que não tenho um prompt de shell. Isso me deixa completamente dependente do outro sistema para já ter instalado o que eu preciso. Minha experiência geral é que, se não consigo receber um aviso, quase certamente não consigo obter outros serviços que considero fundamentais para o meu fluxo de trabalho. Traços (principais) diferentes para pessoas diferentes.
precisa
65

Ninguém mencionou a extensão do chaveiro. Ele salvará o nome de usuário e a senha no chaveiro do sistema, que é muito mais seguro do que armazenar suas senhas em um arquivo estático, como mencionado acima. Execute as etapas abaixo e você deve estar pronto. Eu tive isso em funcionamento no Ubuntu em cerca de 2 minutos.

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

user570626
fonte
1
Esta é a minha solução favorita. ... e apenas a segunda que @hadrien disse, após o descrito três ações que funciona como um encanto no Mac OS X.
ngeek
Eu também segundo @ngeek por me destacar!
Hadrien
No Windows, pelo menos TortoiseHg suporta extensão keyring: Global Settings -> Extensões -> mercurial_keyring
user272735
Infelizmente, atualmente a extensão do chaveiro possui um bug no Windows, onde ele pode salvar apenas uma senha de cada vez. Veja esta pergunta .
Laurens Holst
Essa parece ser a melhor solução, mas quando tento usá-la no OSX, o python segfaults ao tentar obter a senha do chaveiro.
Isaac
30

Um truque simples é adicionar nome de usuário e senha ao URL de envio no .hg/hgrcarquivo do seu projeto :

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

(Observe que dessa maneira você armazena a senha em texto sem formatação)

Se você estiver trabalhando em vários projetos no mesmo domínio, poderá adicionar uma regra de reescrita em seu ~/.hgrcarquivo, para evitar repetir isso para todos os projetos:

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

Novamente, como a senha é armazenada em texto sem formatação, eu costumo armazenar apenas meu nome de usuário.

Se você estiver trabalhando no Gnome, explico como integrar o Mercurial e o Gnome Keyring aqui:

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

Roberto Aloi
fonte
Eu baixei a extensão, no entanto, quando tentei fazer um push, o prompt da senha se recusa a me deixar passar :( Pode ser que eu tenha feito isso da maneira errada. Eu nunca usei o Gnome Keyring antes. Obrigado ao mesmo tempo.
satoru 6/04/10
Você pode querer usar --debug e opções --verbose para push hg para ver o que está acontecendo de errado ...
Roberto Aloi
perfeito para o caso em questão ... se você estiver usando ssh, você não precisa passar em uma senha ... isso é o que as teclas de um para
beauXjames
Supondo que você tenha o luxo de um dispositivo do qual você pode obter a chave pública, é claro.
David Given
23

NINGUÉM acima explicou / esclareceu termos para um usuário iniciante. Eles ficam confusos com os termos

.hg / hgrc - esse arquivo é usado para o repositório, no local / local da área de trabalho / na pasta .hg do repositório real.

~ / .hgrc - esse arquivo é diferente do arquivo abaixo. esse arquivo reside no diretório ~ ou home.

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

Esta é uma das linhas da seção / diretiva [auth], enquanto estiver usando a extensão do chaveiro mercurial. Verifique se o nome do servidor que você coloca lá corresponde ao que você usa enquanto faz o "hg clone", caso contrário, o chaveiro dirá: usuário não encontrado. bb ou myremote na linha abaixo, são "alias name" que você DEVE dar ao fazer "hg clone http: /.../../ repo1 bb ou myremote" caso contrário, ele não funcionará ou você precisará garantir que seu local O arquivo .hg / hgrc do repositório contém o mesmo alias, ou seja, (o que você deu ao fazer o hg clone .. como último parâmetro).

PS os seguintes links para obter detalhes claros, desculpe-me pela gramática escrita rapidamente.

ex: se dentro de ~ / .hgrc (diretório inicial do usuário no Linux / Unix) ou mercurial.ini no Windows no diretório inicial do usuário, contiver a seguinte linha e se você

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

, nunca serão solicitadas credenciais de usuário mais de uma vez por link de repo http. Em ~ / .hgrc, em [extensions], uma linha para "mercurial_keyring =" ou "hgext.mercurial_keyring = /path/to/your/mercurial_keyring.py" .. uma dessas linhas deve estar lá.

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

Estou tentando descobrir como definir a propriedade PREFIX para que o usuário possa clonar ou executar qualquer operação Hg sem solicitações de nome de usuário / senha e sem se preocupar com o que ele mencionou no http: // .... / ... servername ao usar o link de reporte Hg. Pode ser IP, nome do servidor ou FQDN do servidor

AKS
fonte
4

instalação mercurial_keyring no Mac OSX usando o MacPorts:

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

Adicione o seguinte a ~ / .hgrc:

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

[extensions]
mercurial_keyring =
ftvs
fonte
Eu recebo "nenhum módulo chamado mercurial_keyring" no TortoiseHg depois de executar esses comandos e atualizar meu arquivo .hgrc.
Dunc
Verifique se você tem a versão correta Python, como descrito aqui: stackoverflow.com/questions/5173197/...
PHM
2

Se você estiver usando o TortoiseHg, precisará executar essas três etapas mostradas na captura de tela anexada, isso adicionará suas credenciais para o repositório específico com o qual você está trabalhando.

insira a descrição da imagem aqui

Para adicionar configurações globais, você pode acessar o arquivo C: \ users \ user.name \ mercurial.ini e adicionar a seção

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

Espero que isto ajude.

AB
fonte
0

Embora possa ou não funcionar na sua situação, achei útil gerar uma chave pública / privada usando o Putty's Pageant.

Se você também estiver trabalhando com o bitbucket (.org), deverá fornecer uma chave pública à sua conta de usuário e, em seguida, os comandos que chegarem ao repositório serão protegidos automaticamente.

Se o Pageant não inicializar para você durante uma reinicialização, você poderá adicionar um atalho ao Pageant no "Menu Iniciar" do Windows e o atalho pode precisar ter uma 'propriedade' preenchida com o local do seu arquivo privado (.ppk) .

Com isso, o Mercurial e seus repositórios locais precisarão ser configurados para push / pull usando o formato SSH.

Aqui estão algumas instruções detalhadas sobre o Atlassian site da para Windows OU Mac / Linux.

Você não precisa aceitar minha palavra e, sem dúvida, há outras maneiras de fazê-lo. Talvez estas etapas descritas aqui sejam mais para você:

  1. Inicie o PuttyGen a partir de Iniciar -> PuTTY-> PuttyGen
  2. Gere uma nova chave e salve-a como um arquivo .ppk sem uma senha
  3. Use Putty para fazer login no servidor ao qual você deseja se conectar
  4. Anexe o texto da Chave Pública de PuttyGen ao texto de ~ / .ssh / allowed_keys
  5. Crie um atalho para o seu arquivo .ppk em Iniciar -> Putty to Start -> Inicialização
  6. Selecione o atalho .ppk no menu Iniciar (isso acontecerá automaticamente a cada inicialização)
  7. Veja o ícone Pageant na bandeja do sistema? Clique com o botão direito do mouse e selecione "Nova sessão"
  8. Digite username @ hostname no campo "Host name"
  9. Agora você efetuará login automaticamente.
veeTrain
fonte
0

Use extensão de chaveiro. Adicione abaixo a entrada ao arquivo mercurial.ini.

[extensões] mercurial_keyring =

sudarsan - 406
fonte