2009-12-28 12:08:48 +0000 2009-12-28 12:08:48 +0000
143
143

Como utilizar o porta-chaves Mac OS X com chaves SSH?

Compreendo que desde Mac OS X Leopard o Porta-Chaves tem apoiado o armazenamento de chaves SSH. Alguém poderia explicar como é que esta funcionalidade deve funcionar.

Tenho algumas chaves RSA que gerei armazenadas no meu directório ~/.ssh para acesso a vários servidores. Não tenho frases-passe definidas nessas chaves. Actualmente, para aceder a esses servidores, utilizo os seguintes comandos no Terminal:

eval `ssh-agent` ssh-add ~/.ssh/some\_key\_rsa ssh user@server

(Escrevi algumas funções Bash para facilitar isto)

Existe uma melhor maneira de o fazer utilizando o Keychain?

Respostas (9)

255
255
255
2011-04-11 19:58:42 +0000

A partir da libertação do Leopardo do OS X, o ssh-agent está mais fortemente integrado com o Keychain. É possível armazenar com segurança as frases-chave de todas as suas chaves SSH no Keychain, a partir do qual o ssh-agent as lerá no arranque. O resultado final é que é simples proteger as suas chaves com frases-passe, mas nunca terá de digitar a frase-passe para as utilizar! Aqui está como:

Adicione a frase de passagem a cada chave ssh ao porta-chaves: (opção -k carrega apenas chaves privadas simples, salta certificados)

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

(note que é um K maiúsculo)

Sempre que reiniciar o seu Mac, todas as chaves SSH no seu porta-chaves serão automaticamente carregadas. Deverá ser capaz de ver as chaves na aplicação Keychain Access, bem como a partir da linha de comando via:

ssh-add -l
82
82
82
2016-12-12 18:17:44 +0000

A partir de macOS Sierra, ssh-agente já não carrega automaticamente as chaves ssh carregadas anteriormente quando faz o login na sua conta. Isto é intencional na parte da Apple, eles quiseram realinhar-se com a implementação OpenSSH mainstream. [1]


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

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

  2. Qualquer chave que adicionar ao ssh-agente usando o comando ssh-add /path/to/your/private/key/id_rsa será automaticamente adicionada ao chaveiro, e deverá ser carregada automaticamente ao reiniciar.


O seguinte é depreciado (guardado para referência).

Para voltar ao comportamento anterior, quereria executar o comando ssh-add -A (que carrega automaticamente todas as chaves ssh que têm frases-passadas no seu porta-chaves) quando iniciar a sessão. Para o fazer, siga estes passos:

  1. Primeiro, adicione todas as chaves que deseja carregar automaticamente ao ssh-agente usando o comando ssh-add -K /absolute/path/to/your/private/key/id_rsa. O argumento -K assegura que a frase-chave é adicionada ao chaveiro macOS. Certifique-se de que utiliza o caminho absoluto para a chave. A utilização de um caminho relativo fará com que o guião auto-lançado não encontre a sua chave.

  2. Certifique-se de que todas as suas chaves são mostradas como adicionadas quando digita ssh-add -A.

  3. Crie um ficheiro chamado com.yourusername.ssh-add.plist em ~/Library/LaunchAgents/ com o conteúdo abaixo. Os ficheiros de lista_ como este são utilizados pelo launchd para executar scripts quando faz o login. [2] [3]

  4. Diga ao launchd para carregar o ficheiro plist que acabou de criar ao executar: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

E deve estar tudo pronto.

34
34
34
2017-01-05 18:53:54 +0000

Há uma forma mais simples do que resposta de Ricardo de persistir a sua palavra-passe entre sessões/inicialização do seu Mac a correr 10,12 Sierra.

  1. ssh-add -K ~/.ssh/id_rsa Nota: altere o caminho para onde se encontra a sua chave id_rsa.
  2. ssh-add -A
  3. Criar (ou editar se existir) o seguinte ficheiro ~/.ssh/config:

Apple mudou propositadamente o comportamento do ssh-agent em macOS 10.12 Sierra para deixar de carregar automaticamente as chaves SSH anteriores, tal como se observa neste OpenRadar , discussão no Twitter , e Nota Técnica da Apple . A solução acima irá imitar o antigo comportamento de El Capitan e lembrar a sua palavra-passe.

17
17
17
2009-12-28 17:37:32 +0000

Para que funcione, a variável $SSH_AUTH_SOCK ambiente deve ser apontada para /tmp/launch-xxxxxx/Listeners. Isto é suposto ser feito automaticamente quando se faz o login. O ouvinte naquela tomada fala o protocolo ssh-agent.

Os seus scripts de bash estão a iniciar o seu próprio agente ssh (soletrado ssh-agent, não ssh_agente) e a anular o ssh-agent existente que está configurado para si no início de sessão.

Além disso, o objectivo do chaveiro é armazenar as senhas para as suas chaves ssh, mas diz que não tem as senhas definidas nessas chaves, por isso não tenho a certeza do que espera da integração do chaveiro.

Finalmente, quando iniciar sessão pela primeira vez, provavelmente não verá um processo ssh-agent. Esse processo será iniciado automaticamente pelos serviços de lançamento na primeira vez que algo tentar ler essa tomada em /tmp.

10
10
10
2011-04-28 13:28:40 +0000

Nota: para macOS Sierra, consultar a resposta mais recente resposta de ChrisJF .

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

ssh-add -K [path/to/private SSH key]
```.
6
6
6
2013-10-14 12:29:41 +0000

Tive um problema semelhante ao tentar fazer login usando um ssh cert de cliente. Neste caso específico, foi para aceder a um repositório git. Esta era a situação:

  • A chave foi guardada em ~/.ssh/
  • A chave privada tem uma frase-chave. & - A frase-chave é guardada no porta-chaves de login OS X. ~/Library/Keychains/login.keychain
  • A ligação foi a seguinte: meu mac -> mac remoto -> git/ssh server
  • Mac OS X 10,8,5

Quando me liguei ao mac remoto usando o desktop remoto, não tive problemas. Contudo, quando me liguei com SSH ao mac remoto, foi-me pedida sempre a palavra-passe ssh. Os passos seguintes resolveram-na para mim.

  1. security unlock-keychain A frase-chave de acesso é armazenada no chaveiro de acesso. Isto desbloqueia-a e permite ao ssh-agent aceder a ela.
  2. evalssh-agente -s`` Inicia o ssh-agente para uso em conchas. Irá obter a frase-chave do chaveiro e utilizá-la para desbloquear a chave privada ssh.
  3. Estabelece a ligação ssh/git e faz o meu trabalho.
  4. evalssh-agente -k`` Mata o ssh-agente em funcionamento.
  5. security lock-keychain Bloquear novamente o porta-chaves.
6
6
6
2009-12-28 12:55:13 +0000

Suspeito que não está a utilizar o comando padrão ssh. Tem o comando ssh instalado através de portas? Tente which ssh para ver qual o comando ssh que está a utilizar.

Normalmente deve mostrar uma caixa de diálogo pedindo-lhe uma senha, se ainda não estiver guardada no seu porta-chaves.

4
4
4
2014-03-26 09:45:49 +0000

Ver 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 detalhe foi pedido: o comando “segurança” é capaz de importar chaves (e outras coisas) directamente para os Porta-Chaves. O bom é que, ao contrário do ssh-add, é capaz de especificar o chaveiro. Isto torna possível importar directamente para o sistema Keychain (“man security” para aprender como)

1
1
1
2017-01-26 10:39:16 +0000

A melhor e a solução pretendida pela Apple (desde macOS 10.12.2) é descrita aqui

Portanto, basta fazer o seguinte:

& > echo “UseKeychain yes” >> ~/.ssh/config