Questão Como usar o Mac OS X Keychain com chaves SSH?


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

Eu tenho algumas chaves RSA que eu gerou armazenados no meu diretório ~ / .ssh para acessar vários servidores. Eu não tenho senhas definidas nessas chaves. Atualmente, para fazer login nesses servidores, eu uso os seguintes comandos no Terminal:

eval `ssh-agent`
ssh-add ~ / .ssh / some_key_rsa
ssh user @ server

(Escrevi algumas funções Bash para facilitar isso.)

Existe uma maneira melhor de fazer isso usando o Keychain?


133


origem




Respostas:


Para que funcione, o $SSH_AUTH_SOCK variável de ambiente deve ser apontada para /tmp/launch-xxxxxx/Listeners. Isso deve ser feito automaticamente quando você faz o login. O ouvinte nesse soquete fala o protocolo ssh-agent.

Seus scripts bash estão iniciando seu próprio agente ssh (escrito ssh-agent, não ssh_agent) e sobrepondo o existente ssh-agent que está configurado para você no login.

Além disso, o objetivo do keychain é armazenar as senhas em suas chaves ssh, mas você diz que não tem senhas configuradas nessas chaves, então não tenho certeza do que você espera da integração do keychain.

Finalmente, quando você fizer login pela primeira vez, provavelmente não verá um processo de agente ssh. Esse processo será iniciado automaticamente pelos serviços de inicialização na primeira vez que algo tentar ler esse socket /tmp.


16



Obrigado. Então eu ainda terei que correr ssh-add adicionar minhas identidades RSA ao agente ssh padrão iniciado no login? - John Topley
Você não precisa executar ssh-add; O ssh-agent pedirá a senha da chave na primeira vez que você executar o ssh. - Rudedog
Está me pedindo a senha toda vez que eu executo o ssh. O ponto é que não quero ter que digitar senhas. - John Topley
O que está lhe pedindo a senha? Estou começando a suspeitar que é o servidor remoto que está solicitando, o que coloca sua afirmação de que suas chaves não têm senhas em uma perspectiva melhor. Se você quiser ignorar a senha no servidor remoto, você precisa adicionar sua chave pública para $HOME/.ssh/authorized_keys nesse servidor. O ssh-agent + keychain do Mac OS é usado apenas para armazenar a frase secreta para as chaves ssh locais; não se destina a enviar senhas remotas através de conexões ssh existentes. - Rudedog
usar ssh -v para diagnosticar o que o ssh está fazendo. também use sshd -p 8900 -v no lado do servidor e ssh -v remote:8900 para diagnosticar o que o sshd está fazendo. - Rudedog


A partir do lançamento do Leopard do OS X, o ssh-agent está mais integrado com o Keychain. É possível armazenar as passphrases de todas as suas chaves SSH de forma segura no Keychain, a partir do qual o ssh-agent as lerá na inicialização. O importante é que é simples proteger suas chaves com senhas, mas nunca precisar digitar a frase secreta para usá-las! Aqui está como:

Adicione a frase secreta a cada chave ssh para keychain: (a opção -k carrega somente chaves privadas simples, ignora certificados)

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

(note que é um K maiúsculo)

Sempre que você reiniciar o seu Mac, todas as chaves SSH no seu chaveiro serão automaticamente carregadas. Você deve conseguir ver as chaves no aplicativo Acesso às Chaves, bem como na linha de comando por meio de:

ssh-add -l

242



Essa deve ser a resposta aceita. - Kris
a resposta aceita responde a essa pergunta específica do usuário, mas isso responde à pergunta do usuário genérico - eqzx
developer.apple.com/library/mac/documentation/Darwin/Reference/…  Você também precisa da opção -K para armazenar senhas no chaveiro. - Neeme Praks
Se você instalou outra versão do SSH através de um sistema de pacotes como o Homebrew, então é necessário usar um caminho absoluto como /usr/bin/ssh-add. - Ludovic Kuty
Para macOS Sierra, as coisas mudaram. Vejo github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain - schieferstapel


A partir de MacOS Sierra, ssh-agent não carrega automaticamente as chaves ssh carregadas anteriormente quando você faz login na sua conta. Isso é intencional na parte da Apple, eles queriam se realinhar com o mainstream OpenSSH implementação. [1]


Como explicado Aqui, este é o método recomendado desde macOS 10.12.2:

  1. Adicione as seguintes linhas ao seu ~/.ssh/config Arquivo:

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. Qualquer tecla que você adicionar ao ssh-agent usando o ssh-add /path/to/your/private/key/id_rsa O comando será adicionado automaticamente ao keychain e deverá ser carregado automaticamente na reinicialização.


O seguinte é obsoleto (mantido para referência).

Para voltar ao comportamento anterior, você gostaria de executar o ssh-add -A comando (que carrega automaticamente todas as chaves ssh que têm frases secretas no seu chaveiro) quando você efetua login. Para fazer isso, siga estas etapas:

  1. Primeiro, adicione todas as chaves que você deseja carregar automaticamente ssh-agent usando o ssh-add -K /absolute/path/to/your/private/key/id_rsa comando. o -K argumento garante que a frase chave é adicionada ao chaveiro do macOS. Certifique-se de usar o caminho absoluto para a chave. Usar um caminho relativo fará com que o script de inicialização automática não encontre sua chave.

  2. Certifique-se de que todas as suas chaves sejam exibidas conforme adicionadas ao digitar ssh-add -A.

  3. Crie um arquivo chamado com.yourusername.ssh-add.plist dentro ~/Library/LaunchAgents/ com o conteúdo abaixo. Arquivos plist como este é usado por launchd para executar scripts quando você efetuar login. [2]  [3]

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
      <string>com.user.loginscript</string>
    <key>ProgramArguments</key>
      <array>
        <string>ssh-add</string>
        <string>-A</string>
      </array>
    <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    
  4. Contar launchd para carregar o arquivo plist você acabou de criar executando: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

E você deve estar tudo pronto.


70



Relacionado: apple.stackexchange.com/questions/48502/… - slm


Existe uma maneira mais simples que A resposta de Ricardo para manter sua senha entre sessões / reinicializações do seu Mac executando 10.12 Sierra.

  1. ssh-add -K ~/.ssh/id_rsa
    Nota: mude o caminho para onde sua chave id_rsa está localizada.
  2. ssh-add -A 
  3. Crie (ou edite se existir) o seguinte ~/.ssh/config Arquivo:

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

    Agora a senha é lembrada entre reinicializações!

A Apple propositalmente mudou o comportamento do ssh-agent no macOS 10.12 Sierra para não carregar mais automaticamente as chaves SSH anteriores, conforme observado neste documento. OpenRadar, Discussão no Twittere Nota técnica da Apple. A solução acima irá imitar o antigo comportamento de El Capitan e lembrar sua senha.


29



Incrível, funciona como um charme, imho muito mais limpo que os outros e resolveu no lugar certo :) - GerardJP


Nota: para macOS Sierra, por favor consulte o mais recente resposta por ChrisJF.

A [resposta de Jeff McCarrell] [2] está correta, exceto que o comando para adicionar a frase secreta contém um traço em vez de um hífen, ou seja, –K ao invés de -K, causando uma mensagem para o efeito de –K: No such file or directory. Deve ler:

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

9



Este deve ser um comentário para a resposta a que você se refere, em vez de uma resposta nova. Estamos falando de segurança aqui. Pode-se sugerir que você deve digitá-lo cuidadosamente em vez de copiar e colar cegamente ssh-add -K - Phil_1984_
Usando um hífen com K, recebo illegal option -- K. K minúsculo é listado como uma opção. - Sam Dutton
Obrigado pelo feedback. Acabei de verificar no macOS Sierra: -K, ou seja, traço-capital-K, ainda é válido - simonair


Eu suspeito que você não está usando o padrão ssh comando. Você tem ssh instalado via portas? Experimentar which ssh para ver qual ssh comando que você está usando.

Normalmente, ele deve exibir uma caixa de diálogo solicitando sua senha, se ela já não estiver armazenada no seu keychain.


6



Eu não estou usando portas. - John Topley
Obrigado pela informação :) Eu tive problemas porque eu estava usando o OpenSSH da Homebrew. - ggustafsson


Eu tive um problema semelhante ao tentar entrar usando um cliente ssh cert. Neste caso específico, foi para acessar um repositório git. Esta foi a situação:

  • Key foi salvo em ~/.ssh/
  • A chave privada tem uma frase secreta.
  • A frase secreta é armazenada no keychain de login do OS X. ~/Library/Keychains/login.keychain
  • A conexão foi a seguinte: my mac -> mac remoto -> servidor git / ssh
  • Mac OS X 10.8.5

Quando me conectei ao mac remoto usando o desktop remoto, não tive nenhum problema. No entanto, ao conectar-se com o SSH ao mac remoto, me pediram a senha ssh todas as vezes. As etapas a seguir resolveram isso para mim.

  1. security unlock-keychain A frase secreta é armazenada no chaveiro de login. Isso desbloqueia e permite que o agente ssh o acesse.
  2. eval `ssh-agent -s` Inicia o ssh-agent para uso do shell. Ele obterá a frase secreta do chaveiro e a usará para desbloquear a chave ssh privada.
  3. Estabeleça a conexão ssh / git e faça meu trabalho.
  4. eval `ssh-agent -k` Mate o agente ssh em execução.
  5. security lock-keychain Bloqueie o chaveiro novamente.

6



Para que o número 2 funcione para mim dentro de um alias, eu tive que usar eval \$(ssh-agent) por Re: login remoto e chaveiro. Quando não está dentro de um alias eval $(ssh-agent) trabalho (sem a barra invertida $). - Travis


Veja também:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

... adicionando esta nota como mais detalhes foram solicitados: o comando "security" é capaz de importar chaves (e outras coisas) diretamente para Keychains. O bom é que, ao contrário do ssh-add, você pode especificar o chaveiro. Isso torna possível importar diretamente para o sistema Keychain ("man man" para aprender como)


4



Você poderia dar um pouco mais de detalhes a esta resposta, por favor? Obrigado. - Matthew Williams


O melhor e a solução pretendida pela Apple (desde macOS 10.12.2) é descrito Aqui

Então faça o seguinte:

echo "UseKeychain yes" >> ~ / .ssh / config


1



Usando >> está em risco se você inserir o comando várias vezes. Melhor fazer uma edição manual do arquivo, conforme descrito por ChrisJF answer. - Cœur
Sim você aí mesmo - Ben