O ssh-add não é persistente entre as reinicializações

150

Adicionei uma chave ssh ao agente:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

Após uma reinicialização, o agente não tem mais essa chave adicionada:

$ ssh-add -l
The agent has no identities.

Por quê isso aconteceu?

ア レ ッ ク
fonte
Não tenho tempo para responder totalmente agora, mas o gpg-agent no modo ssh fará o que você deseja. Tente isso em vez do agente ssh herdado. Se isso ajudar, eu poderia tentar expandir isso quando tiver tempo mais tarde.
Vality 01/07/2014
@ Qualidade: Duvido que o gpg-agent seja persistente nas reinicializações.
Pavel Šimerda
@ PavelŠimerda Criptografa as chaves privadas com a senha dos usuários e as coloca $HOME/.gnupg/private-keys-v1.dassim que você as adiciona com ssh-add. É realmente persistente. Bem, supondo que você tenha um diretório inicial não volátil.
Vality 01/07/2014
@ Qualidade: Isso não deveria ser considerado um problema de segurança? Você não poderia usar uma chave sem uma senha e terminar com ela sem precisar de nenhum agente?
Pavel Šimerda
1
@ PavelŠimerda Não é realmente um problema de segurança, uma vez que a chave é armazenada criptografada com a senha do usuário, ela ainda precisa da senha digitada toda vez que o usuário faz login para descriptografá-la. Armazenar a chave não criptografada significa que um usuário com root (ou um ladrão que pegou seu disco rígido) pode roubá-los do seu diretório pessoal; com o gnupg, se eles roubarem, eles serão criptografados com sua senha e, portanto, serão inúteis.
Vality 5/07/2014

Respostas:

174

A adição de chaves ao agente é transitória. Eles duram apenas enquanto o agente estiver em execução. Se você o matar ou reiniciar o computador, eles serão perdidos até que você os adicione novamente. Na ssh-agentpágina do manual:

O ssh-agent é um programa para armazenar chaves privadas usadas para autenticação de chave pública (RSA, DSA, ECDSA). A idéia é que o ssh-agent seja iniciado no início de uma sessão X ou de sessão de logon e todas as outras janelas ou programas sejam iniciados como clientes do programa ssh-agent. Através do uso de variáveis ​​de ambiente, o agente pode ser localizado e usado automaticamente para autenticação ao efetuar login em outras máquinas usando o ssh (1).

O agente inicialmente não possui nenhuma chave privada. As chaves são adicionadas usando o ssh-add (1). Quando executado sem argumentos, ssh-add (1) adiciona os arquivos ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsae ~/.ssh/identity. Se a identidade tiver uma senha, ssh-add (1) solicitará a senha no terminal, se houver um ou em um pequeno programa X11, se estiver executando no X11. Se nenhum desses for o caso, a autenticação falhará. Em seguida, ele envia a identidade ao agente. Várias identidades podem ser armazenadas no agente; o agente pode usar automaticamente qualquer uma dessas identidades. ssh-add -lexibe as identidades atualmente mantidas pelo agente.

macOS Sierra

A partir do macOS Sierra 10.12.2 , a Apple adicionou uma opção de configuração UseKeychain para configurações de SSH. Você pode ativar esse recurso adicionando UseKeychain yesao seu ~/.ssh/config.

Host *
  UseKeychain yes

Chaveiro OSX

Não uso o OSX, mas encontrei estas perguntas e respostas no SuperUser intitulado: Como usar o Mac OS X Keychain com chaves SSH? .

Entendo que, desde o Mac OS X Leopard, o Keychain suporta o armazenamento de chaves SSH. Alguém poderia explicar como esse recurso deve funcionar.

Portanto, pelo som, você pode importar suas chaves SSH para o Keychain usando este comando:

$ ssh-add -K [path/to/private SSH key]

Suas chaves devem persistir de inicialização para inicialização.

Sempre que você reiniciar o seu Mac, todas as chaves SSH no seu chaveiro serão carregadas automaticamente. Você poderá ver as chaves no aplicativo Keychain Access, bem como na linha de comando via:

  ssh-add -l

Fonte: Superusuário - Como usar o Mac OS X Keychain com chaves SSH?

slm
fonte
realmente? No Linux, não tenho esse problema. Tenho que "ssh-add my_key" cada vez que reinicio o computador?
217141 ア
2
@Alex Como a resposta explica, o agente adiciona automaticamente ~/.ssh/id_rsa. Eu estou supondo que este é o local do seu arquivo-chave no linux. Também é possível que você não esteja usando o agente de chave ssh padrão. Existem outros, como o gnome-keyring-daemon, que podem ter um comportamento diferente.
Patrick
mas no Mac chama-se "id_rsa_mac". Como faço para que o agente o adicione automaticamente?
217141 ア
@ Patrick: Não tenho certeza se o clássico ssh-agentadiciona alguma chave automaticamente. Na minha opinião, é ssh-addque lê os locais padrão ou o sshcliente, se você não estiver usando o agente.
Pavel Šimerda
5
Nota lateral pequena, se o comando ssh-add não reconhecer o sinalizador -K, você provavelmente está usando a versão macports do ssh-add ... você pode ignorar a versão macports especificando o caminho completo para a versão OSX do ssh-add assim:/usr/bin/ssh-add -K /path/to/private/key
ChrisR
20

O ssh-agenté um serviço de sessão que armazena chaves temporariamente para o usuário.

O principal objetivo do agente SSH é lembrar a versão em texto não criptografado de uma chave protegida usando uma senha. Em outras palavras, a chave é armazenada no disco criptografado usando uma senha e o proprietário da chave usa ssh-addou alguma ferramenta da GUI para fornecer a senha e instruir o agente a lembrá-la até que a sessão termine ou o usuário solicite remoção explicitamente.

Se você não estiver usando uma senha e não estiver encaminhando o agente (o que é inseguro para a maioria das finalidades), você não precisa do agente . Qualquer cliente SSH deve poder ler a chave do disco, de um local padrão ou de um especificado explicitamente.

Os locais padrão estão listados na página de manual ssh(1):

O padrão é ~ / .ssh / identity para a versão 1 do protocolo e ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 e ~ / .ssh / id_ed25519 e ~ / .ssh / id_rsa para a versão 2 do protocolo.

Ao usar locais fora do padrão, você pode usar a -iopção sshdescrita na mesma página de manual ou a opção respectiva no cliente SSH que você está usando.

Pavel Šimerda
fonte
4
+1 por defender a não utilização dessh-agent
dg99
7

Na Serra :

Use UseKeychain . (Eu não tentei isso, mas parece a solução mais correta.)

Ou

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

Ou crie um arquivo plist em vez de anexá-lo ~/.bash_profile.

Isenção de responsabilidade: como outros observaram, não sei como é seguro armazenar senhas ssh no chaveiro.

David Winiecki
fonte
Eu tentei todos os métodos acima, mas apenas este funciona. Obrigado!
Duannx 26/02