O agente SSH perde a identidade ao reiniciar a máquina

12

Depois de criar chaves com o nome id_rsano local padrão. Estou adicionando identidade ao agente SSH com o comando ssh-add ~/.ssh/id_rsaEle está sendo adicionado com sucesso.

Posso SSH sem inserir a senha da chave, pois já está com o SSH Agent.

Mas , quando eu reinicio a máquina ou servidor e, em seguida, verifico a identidade com o comando ssh-add -L, estou recebendo uma mensagem como The agent has no identities.

Isso significa que, quando reiniciamos a máquina, o agente perdeu a identidade? Esse comportamento é normal ou algo que estou perdendo aqui?

Por favor, me guie, não estou muito familiarizado com o SSH.

Niks
fonte
Veja este tópico no site Unix e Linux.
janosdivenyi

Respostas:

12

É normal. O objetivo de um agente de chaves é apenas manter chaves descriptografadas na memória , mas nunca as gravará em disco. (Isso anularia o objetivo - por que não apenas desproteger a chave principal?)

Portanto, as chaves devem ser desbloqueadas em cada login, e você precisa automatizar isso - no Linux, pam_sshé uma opção; ele usa automaticamente sua senha do sistema operacional para desbloquear o agente. Outro módulo semelhante é o pam_envoyque é um pouco mais confiável (mas requer o systemd).

Ambos os módulos iniciarão o próprio agente e carregarão as chaves automaticamente.

user1686
fonte
alguma idéia como automatizar no terminal mac osx?
Niks
Quando eu executei o comando $SSH_AUTH_SOCK , estou obtendo resultado como:: -bash: /tmp/ssh-gT43vE99vk/agent.511Permissão negada Estou confuso aqui .. aguarde o encaminhamento do meu agente funcionando ou não .. você pode orientar?
Niks
Não é para ser usado como um comando - é uma variável , algo que você usa como parte de outro comando. Por exemplo, echo $SSH_AUTH_SOCKpara imprimir seu valor.
User1686
ei amigo .. alguma idéia? stackoverflow.com/questions/31916395/…
Niks
2

Tente fazer isso no seu ~ / .bashrc :

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

Isso deve solicitar a senha apenas após o login.

Shiro
fonte
Obrigado pela resposta, isso significa que o agente SSH está funcionando corretamente. E depois de adicionar isso, não será necessário adicionar identidade sempre que iniciar a máquina? Desculpe se esta é uma pergunta boba, mas eu sou muito novo no ssh.
Niks
Se a sua chave ssh tiver uma senha, ela será solicitada sempre que você fizer login.
Shiro
Esta resposta é prejudicial . Se você fizer o que diz, ele excluirá sua chave privada. Se você não tiver outra maneira de se autenticar, perderá o acesso aos sistemas em que estiver usando a autenticação de chave pública.
kasperd
2

No OS X, o ssh-add possui um sinalizador especial para conectar-se ao Keychain se você decidir armazenar sua chave privada lá.

Apenas corra ssh-add -K ~/.ssh/id_rsa.

Acredito que isso responda mais plenamente à sua pergunta. É difícil encontrar essa flag específica para o OS X, mas está funcionando desde pelo menos o OS X Leopard.

Olivier Lacan
fonte
2
Esta é a resposta correta, seguida por uma ssh-add -Aque adicionará todas as chaves no chaveiro. Além disso, crie um ~/.ssh/confige adicione UseKeychain yespara que o macOS sempre preserve sua chave, conforme descrito aqui: unix.stackexchange.com/questions/140075/…
lucasarruda
Meu MacBook ainda esquece minha identidade quando eu reinicio, mesmo depois de tentar isso.
Dominic Sayers
0

Esta solução é útil se suas chaves ssh estiverem protegidas por senha.

O problema com todas as respostas acima é que, se a sua chave privada é protegida senha, cada vez que você lançar um novo terminal e tentar usar a chave privada, você tem que digitar a senha e você vai acabar sendo executado várias cópias do ssh-agentno memória. A solução é adicionar o seguinte no seu ~/.bashrcou ~/.zshrc:

##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new 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;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
     }
else
     start_agent;
fi
##### END Fix for ssh-agent #####

Isso solicitará a senha da sua chave privada ssh apenas uma vez quando você iniciar um terminal. A abertura subsequente de novas sessões de terminal (ou visões tmux) reutilizará o ssh-agent criado pelo snippet acima.

Referência

GMaster
fonte