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.


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.


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.


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.


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`

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

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

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>

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