Como evitar que a senha seja solicitada toda vez que eu envio para o Bitbucket


217

Configurei meu material ssh com a ajuda deste guia e ele funcionava bem (eu poderia executar hg pushsem precisar de uma senha). O que poderia ter acontecido entre então e agora, considerando que ainda estou usando o mesmo diretório inicial.

$ cat .hg/hgrc 
[paths]
default = ssh://hg@bitbucket.org/tshepang/bloog

$ hg push
Enter passphrase for key '/home/wena/.ssh/id_rsa': 
pushing to ssh://hg@bitbucket.org/tshepang/bloog
searching for changes
...

Respostas:


337

Você precisa usar um agente ssh. Resposta curta: tente

$ ssh-add

antes de empurrar. Forneça sua senha quando solicitado.

Se você ainda não está executando um agente ssh, receberá a seguinte mensagem:

Could not open a connection to your authentication agent.

Nessa situação, você pode iniciar um e configurar seu ambiente assim

eval $(ssh-agent)

Então repita o ssh-addcomando.

Vale a pena dar uma olhada na página de manual do agente ssh .


2
Qual é o objetivo de evalvocê apenas digitar ssh-agent?
— James McMahon

4
Ele exibe alguns comandos que permitem usá-lo e não os executa para você; evalfaz a extração.
— 21418 tshepang

Não está relacionado à pergunta original, mas se você continuar com esses problemas no GitHub, Bitbucket etc., verifique se está usando a URL do git / ssh, não o http, que continuará pedindo nome de usuário + senha.
— Czechnology

E se você não tem uma chave padrão ou deseja adicionar múltiplos,ssh-add /path/to/key
— hoosierEE

46

Uma maneira de resolver isso é com ssh-agente ssh-add:

$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa: 

Depois disso, a senha é salva para a sessão atual. e não será solicitado novamente.


7
A maioria das pessoas não quer ser incomodada por suas frases secretas.
— connexo

26

Eu uso o Keychain para gerenciar chaves ssh. Ele também está disponível no Debian e, provavelmente, no Ubuntu com

apt-get install keychain

Aqui está a página do pacote de chaves do Debian . Como você pode ver, o projeto não é muito ativo, mas funciona para mim. Também comentei um pouco sobre isso em outra resposta aqui


2
//, isso funcionou para mim. É muito melhor que o ssh-agent, já que não preciso digitar minha senha de chave ssh toda vez que abro um terminal .
— Nathan Basanese

@NathanBasane, você está dizendo que, usando chaveiro, não é necessário digitar a senha da chave ssh toda vez que você abre um terminal? Como você configura isso? porque o chaveiro continua pedindo a senha toda vez que abro o terminal, somente a primeira vez que o abro após a inicialização, mas ainda assim. Não quero inserir a senha sempre.
— M4l490n

@ m4l490n Não, se você estiver usando chaveiro, não precisará digitar a senha da chave ssh toda vez que abrir um terminal. Mas você precisa inseri-lo uma vez após a inicialização. A senha não é salva no disco - isso seria inseguro.
— Faheem Mitha 01/01

Para mim, ele pergunta toda vez que faço login (tenho um repositório git + chaves ssh em um servidor remoto e toda vez que faço um "git pull" preciso digitar a senha))
— Martin Thoma

@MartinThoma Isso parece errado. Verifique se você configurou o .ssh corretamente. Em particular, seu shell está configurado corretamente? Se ainda não está funcionando para você e você não consegue descobrir, você pode fazer uma pergunta.
— Faheem Mitha

13

Crie (ou edite, se existir) o seguinte arquivo ~ / .ssh / config:

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa

Mas eu estou usando um par diferente de chaves para cada serviço ...
— connexo

@connexo você pode substituir o curinga asterisco com seu nome host individual e 'id_rsa' com o seu correspondente chave privada
— ness-EE

1
Eu precisava adicionar IgnoreUnknown AddKeysToAgent,UseKeychainlogo acima UseKeychain yes.
— consideRatio

1
Estou recebendo este erro: "Opção de configuração incorreta: usekeychain" na linha "UseKeychain yes".
— M4l490n

@ m4l490n: parece que a UseKeychainopção foi adicionada no OpenSSH 7.1p2 (28-02-2016). Talvez você tenha uma versão anterior. openssh.com/txt/release-7.2
— chus

6

Por conveniência, o método ideal é uma combinação das respostas de jmtd e Faheem .

Usar ssh-agentsozinho significa que uma nova instância de ssh-agentprecisa ser criada para cada novo terminal que você abrir. keychainquando inicializado, solicitará a senha da (s) chave (s) privada (s) e a armazenará. Dessa forma, sua chave privada é protegida por senha, mas você não precisará digitar sua senha repetidamente.

O wiki do Arch recomenda inicializar as chaves do /etc/profile.d/seu perfil de shell, como .bash_profileou .bashrc. Isso tem uma desvantagem, pois inicializa seu chaveiro assim que você abre um terminal.

Uma abordagem mais flexível é combinar keychaincom uma tmuxsessão específica . Então, em .bash_profile:

tsess=$(tmux ls 2>&1)

if [[ "${tsess%%:*}" = "secured" ]] && 
   [[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
    # start keychain
    /usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
    . $HOME/.keychain/$HOSTNAME-sh
fi

... e, em seguida, é apenas um caso de iniciar a tmuxsessão protegida como e quando necessário (iniciado a partir de um keybind):

#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"

if [[ -z "$SSH_AUTH_SOCK" ]]; then
    eval `ssh-agent`
    trap "kill $SSH_AGENT_PID" 0
fi

if [[ -z "$PID" ]]; then
    urxvtc -title "SSH" -e sh -c "${new}"
else
    urxvtc -title "SSH" -e sh -c "${old}"
fi

ssh-add

Agora, seu chaveiro será inicializado apenas uma vez quando você iniciar essa tmuxsessão específica . Enquanto essa sessão persistir, você poderá acessar essas sshchaves e enviar para seus repositórios remotos.


Como eu faria isso funcionar em uma máquina remota? Modifiquei o segundo script para procurar por $ SSH_CLIENT e, se existir, não execute o urxvtc, apenas o tmux. Isso funciona, mas o problema é a parte .bash_profile. Quando eu entrei pela primeira vez na caixa, ele dizia "servidor não encontrado: conexão recusada", que é a saída de "tmux ls". Então, quando executo o segundo script, o tmux inicia uma nova sessão ou anexa a uma existente, mas não há prompt de chaveiro. Então, quando eu sair da sessão, o prompt do chaveiro estará lá esperando.
— 21412 jonyamo

Atualizei a resposta para silenciar a saída do tmux, se não houver sessão.
— jasonwryan

Obrigado, mas isso ainda não resolveu o problema com o chaveiro. O tmux cria a nova sessão, mas vai direto para qualquer prompt vazio. Somente quando saio da sessão do tmux é que vejo o prompt do chaveiro solicitando minha senha.
— jonyamo

Acho que devo parar de dizer chaveiro, já que o chaveiro é executado apenas em .bash_profile. O problema é da execução do ssh-add. Embora, se eu executar o ssh-add manualmente após criar a sessão tmux, ele funcione.
— 21132 jonyamo

1
Pule o segundo script e inicie sua sessão segura do tmux .profile- assim você receberá as chaves assim que fizer o login.
— jasonwryan

0

Você pode usar sshpass:

$ sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server

Você só precisa adicionar sshpass -p yourpassphraseantes de anexar seu sshcomando usual .


2
Parece uma ideia realmente estúpida. Isso não faria sua senha aparecer em texto não criptografado no seu histórico de shell?
— connexo

Exatamente, mas você também não deve proteger sua sessão com uma senha?
— Belka

1
Mesmo que sim, com que frequência você tem um colega sentado ao seu lado e ajudando / aprendendo com você?
— connexo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.