Digite a senha SSH uma vez

124

Antes da atualização

Quando eu estava executando git clone git@...(usando ssh) uma vez por reinicialização do computador, apareceu uma caixa de diálogo da janela contendo uma caixa de texto para inserir minha senha SSH e confirmada com OK. Então, a senha não era mais necessária até a próxima inicialização do meu sistema.

Após a atualização para 13.10

Após a atualização para o Ubuntu 13.10, essa janela não aparece mais, mas uma mensagem no terminal aparece:

Enter passphrase for key '/home/username/.ssh/id_rsa': 

... sempre que a clonagem de um repositório git é exibida.

Como posso consertar isso? Quero inserir minha senha apenas uma vez.

Ionică Bizău
fonte
11
Eu acho que você tem que usar o ssh-addcomando para isso. Tentaste?
Devius # 20/13
2
Eu tentei ssh-agent bash+ ssh-add. Isso funciona apenas por alguns minutos.
Jonic Biz 20/10/2013
Estou tendo o mesmo problema, afinal. Eu acho que pode ser um conflito entre o ssh-agent do OpenSSH e o Gnome Keyring Daemon.
Devius # dev13
2
Adicionar AddKeysToAgent yesa .ssh / config funciona para mim.
precisa saber é o seguinte

Respostas:

138

Atualização: parece ser um bug da 13.10:

https://bugs.launchpad.net/ubuntu/+source/libpam-ssh/+bug/1247169


De qualquer forma, executando os seguintes comandos, o problema foi corrigido para mim:

Como consertar

Corrigi isso inserindo os seguintes comandos:

$ ssh-agent bash

Isso cria um novo processo de bash que permite adicionar chaves privadas. Ao adicionar uma nova chave privada, a senha será solicitada uma e apenas uma vez.

E depois:

$ ssh-add /home/username/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa: 
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)

... onde usernameestá seu nome de usuário. Você pode fazer o mesmo usando a $USERvariável:

$ ssh-add /home/$USER/.ssh/id_rsa

Como alternativa, basta usar o ~seu diretório pessoal.

$ ssh-add ~/.ssh/id_rsa

E o problema foi resolvido.

Ionică Bizău
fonte
48
Isso não resolve o problema. Ele apenas adiciona a identidade ao agente até você sair do terminal. Se você abrir um novo terminal, precisará ssh-addnovamente.
Devius 11/11
@ devius Sim, parece ser um bug. Mas, os comandos acima fixo meu problema ...
Ionică Bizau
3
Então, para esclarecer: Com essa "correção", você não precisará digitar a senha novamente nesse terminal novamente. No momento em que você abrir um novo terminal - terá que fornecer a senha novamente.
harijay
9
Eu tentei $ ssh-add /home/username/.ssh/id_rsa(sem ssh-agent bash) e funcionou para mim mesmo depois de reabrir o terminal. Mas a solução completa para mim foi essa stackoverflow.com/a/4246809/532252 . Tudo está ok, mesmo após a reinicialização da máquina.
Kishie
11
Eu apenas digitei ssh-add no terminal. Não há necessidade de mudar para o ssh-agente bash ou especificar um arquivo id_rsa
henry74
39

0) Resposta curta

Adicione sua .ssh/configúnica linha no início:

AddKeysToAgent yes

e execute git / ssh / ... Se não for suficiente, verifique sua versão do ssh e verifique se o ssh-agent está carregado com estas instruções:

1) Verifique a versão do openssh

Primeiro verifique se a sua versão ssh deve ser maior que 7.2 :

ssh -V

2) Edite o arquivo de configuração

Se for o caso, basta adicionar .ssh/configuma linha no início:

AddKeysToAgent yes

3) Verifique se o ssh-agent já está aberto

Normalmente, as distribuições carregam automaticamente um agente ssh. Para verificar, execute

ps aux | grep -v grep | grep ssh-agent

Se você não vir nenhuma linha que a contenha, precisará carregá-la executando:

eval $(ssh-agent)

Observe que isso habilita o agente apenas no terminal atual; portanto, para habilitá-lo em qualquer lugar, você pode tentar adicionar esta linha ao seu ~/.profilearquivo e reiniciar.

tobiasBora
fonte
11
AddKeysToAgent yesé a resposta canônica pós-2016 - e exatamente o que a maioria dos usuários modernos espera. É meados de 2017. O Ubuntu> = 16.04 ( Xenial Xerus ) agora é uma suposição razoável. A maioria das instalações OpenSSH em estado selvagem agora suporta essa opção. Os julgamentos ad-hoc do script de shell do tipo defendido por todas as outras respostas a esta pergunta são tão ... passados . </sigh>
Cecil Curry
2
Esta deve ser a resposta aceita
simernes
32

Este documento Atlassian corrigiu o problema para mim no Ubuntu 14.04 Server Edition:

Basta adicionar esses valores ao seu .bashrcarquivo:

SSH_ENV=$HOME/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

E após o login, ele solicita a senha apenas uma vez e faz o cache. Você não precisa inseri-lo toda vez.

Arda
fonte
2
Isso parece funcionar em outras distros, como se eu tivesse usado com sucesso essa resposta no Sabayon Linux.
BH2017
11
Obrigado! Esta solução funcionou para mim em um sistema ubuntu onde o gnome-keyring-daemon não funcionou devido a problemas no dbus-daemon. Especificamente, eu estava recebendo esses erros "** Mensagem: não foi possível conectar-se ao barramento de sessão do dbus: Não foi possível iniciar automaticamente um dbus-daemon sem um $ DISPLAY para X11" e depois de definir a variável de ambiente de exibição, obtive "** Mensagem: couldn conecte-se ao barramento de sessão do dbus: // bin / dbus-launch terminou de forma anormal com o seguinte erro: Erro de inicialização automática: falha na inicialização do X11. "
user207863
11
Isso precisa de mais votos, corrige o problema no Ubuntu 16.04 virtualizado.
Niels Keurentjes
3
Isso corrige o problema para mim no Bash para Windows também. Tentei iniciar o Bash várias vezes e ele lembrou a senha. Ainda não tentei reiniciar.
Amr
2
depois de tentar todas as outras soluções, isso funcionou para mim. Esta deve ser a solução para o OP
João Pimentel Ferreira
20

Uma solução alternativa para esse bug é adicionar o seguinte na parte inferior do~/.bashrc

eval `gnome-keyring-daemon --start`
Alex Collins
fonte
2
O chaveiro do gnomo não deve fazer parte da sua sessão?
Pavel Šimerda 30/11
11
Se você está falando 'deve', então Esta questão não deve estar aqui em primeiro lugar, se tudo é que perfeito
Anwar
11
Não tenho certeza se isso pertence .bashrc. Parece que você tem que adicioná-lo em algum arquivo de perfil DE
Dmitry Ginzburg
3

Os usuários do shell de peixe podem usar esse script para fazer a mesma coisa.

# content has to be in .config/fish/config.fish
# if it does not exist, create the file
setenv SSH_ENV $HOME/.ssh/environment

function start_agent                                                                                                                                                                    
    echo "Initializing new SSH agent ..."
    ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV
    echo "succeeded"
    chmod 600 $SSH_ENV 
    . $SSH_ENV > /dev/null
    ssh-add
end

function test_identities                                                                                                                                                                
    ssh-add -l | grep "The agent has no identities" > /dev/null
    if [ $status -eq 0 ]
        ssh-add
        if [ $status -eq 2 ]
            start_agent
        end
    end
end

if [ -n "$SSH_AGENT_PID" ] 
    ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    end  
else
    if [ -f $SSH_ENV ]
        . $SSH_ENV > /dev/null
    end  
    ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    else 
        start_agent
    end  
end
Daniel Gerber
fonte
0

Eu uso isso:

vim ~/.profile

eval `/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg`
export SSH_AUTH_SOCK
export GPG_AGENT_INFO
Carlos Silva
fonte
0

Se você usar o arquivo .ppk azul

Basta convertê-lo em pem e adicionar permissão 400 com etapas simples:

sudo apt-get install putty
puttygen <path_to_key>/keyname.ppk -O private-openssh -o <path>/aws_key.pem
sudo chmod 400 <path>/aws_key.pem
ssh -vi aws_key.pem ubuntu@<ip_address>
GrvTyagi
fonte
0

No Ubuntu 18.04, o ssh-agent é iniciado quando a sessão X é aberta, é gerenciada no arquivo /etc/X11/Xsession.options:

# cat /etc/X11/Xsession.options
# $Id: Xsession.options 189 2005-06-11 00:04:27Z branden $
#
# configuration options for /etc/X11/Xsession
# See Xsession.options(5) for an explanation of the available options.
allow-failsafe
allow-user-resources
allow-user-xsession
use-ssh-agent
use-session-dbus
MaxiReglisse
fonte