Como usar a chave privada SSH para fazer login sem inserir a senha sempre no Mac OS X Lion?

Como usar a chave privada SSH para fazer login sem inserir a senha sempre no Mac OS X Lion?

Eu uso o Mac OS X Lion e faço login em hosts remotos via SSH todos os dias. Apesar de eu usar o par de chaves SSH para autenticação remota e não precisar motorizar a frase de login de cada host, ainda é muito irritante que o terminal solicite a senha para acessar minha chave privada SSH.

Por motivos de segurança, acho que é necessária uma senha para acessar a chave privada SSH. Existe uma maneira de fazer com que o terminal solicite a frase exatamente apenas uma vez na inicialização, memorize-a e use automaticamente minha chave privada em sessões SSH posteriores?

Existe um script chamado keychainque funciona bem no Gentoo Linux. Mas nunca descobri isso no Mac OS X Lion. Além do mais, existem tantos termos intimidantes, como ssh-agent,. ssh-addDepois de ler vários materiais sobre esses kits de ferramentas SSH e fazer alguns experimentos frustrados, fiquei mais confuso.

Portanto, vim para o StackExchange em busca de alguns conselhos sobre as seguintes questões.

  1. O que são ssh-agent,, e como eles interagem ssh-addentre si?keychainKeychain Access.app
  2. Como posso inserir a senha da minha chave privada SSH uma vez no login e usá-la livremente na criação posterior da sessão SSH?
  3. Err... O que há de errado com Keychain Access.app? Ele não armazena a frase SSH como fazia antes.

Eu listo o que fiz aqui. Espero que haja pistas sobre as etapas que perdi.

Passo 1. Crie um par de chaves SSH no meu Mac.

$ ssh-keygen -t rsa -C "[email protected]"
# Set a passphrase for accessing the private key.

Etapa 2. Copie minha chave pública SSH para o host remoto. Para dar um exemplo, copio a chave para localhost, Mac.

$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase

Etapa 3. Em seguida, tente conectar-se ao host remoto (localhost aqui), por meio da autenticação de par de chaves SSH.

$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa': 
# Enter my SSH passphrase, not the login password.

Etapa 4. Saia do host remoto e tente conectar-se a ele novamente. Droga, o terminal pede a frase SSH novamente.

Uma pergunta frequente é: "O ssh-agent funciona bem no seu Mac?". Francamente falando, não tenho ideia do que está acontecendo com essas coisas. Aqui mostro alguns resultados em execução.

$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent  # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ??         0:00.03 ssh-agent
26899 ??         0:00.02 ssh-agent

Qualquer feedback é bem-vindo. Obrigado!

Responder1

ssh-agenté a peça que você deseja que funcione, pois faz exatamente o que você está perguntando. O agente é executado como um daemon e, quando você "adiciona" uma chave privada a ele, ele se lembra dessa chave e a fornece automaticamente ao remoto sshddurante a conexão inicial. ( ssh-addé simplesmente o comando que você executa para adicionar manualmente uma chave privada ssh-agent).

No OS X, a partir do Leopard, você nunca deveria ter que executar ssh-agentou ssh-addmanualmente. Isso deveria "simplesmente acontecer" quando você tentar se conectar a um servidor. Uma vez por chave, ele solicitará uma caixa de diálogo de senha da interface do usuário, que (entre outras coisas) permitirá que você adicione automaticamente a chave para ssh-agentque você nunca seja solicitado novamente.

Isso é resolvido com uma launchdconfiguração que escuta conexões no $SSH_AUTH_SOCKsoquete e é iniciada automaticamente ssh-agentquando necessário; depois disso, ssh-agentsolicita credenciais somente quando precisa abrir uma nova chave.

Se isso não funcionar, certifique-se de ter o launchdarquivo de configuração correto presente:

/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist

Se ainda não estiver funcionando para você por algum motivo, aqui está a maneira "antiga" de fazer as coisas funcionarem manualmente:

http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html

Há também este aplicativo, que parei de usar desde o lançamento do Leopard, mas basicamente fazia a mesma coisa nas versões anteriores do Mac OS X:

http://www.sshkeychain.org/

Responder2

Durante o processo de resolução do "problema", pesquisei alguns tópicos relacionados no Google e fiz algumas anotações sobre como ssh-agent, ssh-add, keychain, KeyChain Access.appfuncionam. Finalmente acontece que esta questão não é um problema, em vez disso, a questão é toda sobre mim, e o chamadossh-login-sem-pedir-frase-senha-semprefunciona perfeitamente no Mac imediatamente.

No entanto, este processo me traz algumas experiências. Escrevo minhas anotações aqui na esperança de que ajudem alguém a ficar confuso sobre esses termos.

Dois termos de senha:

  • passphraserefere-se à frase obrigatória ao acessar sua chave privada SSH.
  • passwordrefere-se à frase necessária para fazer login no seu Mac.

Agora posso descobrir o que esses kits de ferramentas fazem, ou seja ssh-agent, no ssh-addMac .keychainKeychain Access.app

  • ssh-agenté o serviço crítico para permitir o uso da chave privada SSH sem digitar a senha SSH. ssh-agentfunciona desta forma. Primeiro ele armazena, ouesconderijo, sua chave privada SSH na memória principal. Posteriormente nesta sessão, quando sua chave SSH privada SSH for necessária para autenticação remota, ssh-agentencontrará sua chave privada na memória principal e a entregará ao processo remoto. A única chance de você ser solicitado a digitar sua senha SSH é quando sua chave privada é adicionada ssh-agentinicialmente.
  • ssh-addfaz parte da ssh-agentcoleção, que ajuda a gerenciar suas chaves SSH no ssh-agent. Usamos ssh-addo comando para listar, adicionar e remover chaves privadas no chaveiro do agente ssh. Em seguida, ssh-addcomunica-se com ssh-agento serviço para cumprir as tarefas.
  • keychainé um script para encontrar ssh-agento serviço (se não existir, iniciar um novo) e chamar ssh-addpara adicionar chaves privadas SSH. keychaintem uma ideia simples e direta, funcionando bem no Linux, onde o ssh-agent geralmente não inicia automaticamente.
  • Keychain Access.appparece ser o componente mais complicado. É o serviço universal de armazenamento de tokens do Mac OS X. Ele armazena vários tokens, como senhas, certificados, etc., e serve como um tokenagentepara os aplicativos que solicitam os tokens. Em nosso caso de chave privada SSH, primeiro ele captura a solicitação de acesso à chave privada SSH e abre uma janela solicitando que você armazene a senha SSH, que é uma espécie de token, no Keychain Access.appchaveiro de . Então, da próxima vez que você usar chaves privadas para autenticação, Keychain Access.appuma janela aparecerá novamente, perguntando se você concede o privilégio. Depois de receber um grande sim, keychain Access.appadicione sua chave privada ao ssh-agentarmazenamento de.

Duas coisas merecem sua atenção:

  1. O Mac OS X Lion inicia automaticamente um ssh-agentserviço na inicialização, escutando em um soquete em /tmp.
  2. Keychain Access.apparmazena sua senha SSH, para que possa adicionar sua chave privada ssh-agentsem interrompê-lo. Sim, não há necessidade de digitar sua frase SSH, mas é necessário digitar a senha de login da sua conta Mac para conceder privilégio ao criar esta entrada pela primeira vez.

Então, em resumo,O login SSH sem perguntar a senha deve funcionar no Mac OS X imediatamente.

Responder3

Caso outras soluções aqui não funcionem para as pessoas, o seguinte funcionou para mim.

Para cada chave privada em seu diretório ~/.ssh, certifique-se de que a chave pública correspondente também esteja presente. Certifique-se de que a chave pública tenha o mesmo nome da chave privada, mas com o nome .pubno final. Se você já possui uma chave pública apropriada, tente regenerá-la.

Se precisar recriar as chaves públicas, você pode fazer isso facilmente: –

ssh-keygen -y -f ~/.ssh/my_key > ~/.ssh/my_key.pub

substituindo my_keypor qualquer que seja o nome da sua chave.

Depois disso, o MacOS lembra a senha da chave no chaveiro como deveria.

Nota - inserir a senha e salvá-la nas chaves agora é uma ação única (não uma vez por sessão de login, como o OP queria), mas assumindo que o login no Mac em questão seja protegido por senha, sua senha será protegida por essa senha de login. Além disso, esta solução não faz sentido para mim... uma chave pública não deveria ser necessária além da chave privada, mas por algum motivo o MacOSX a exige.

(originalmente deresponderpara uma pergunta semelhante no Apple Stack Exchange)

Responder4

Outra coisa que você poderia ter tentado seria substituir ssh-copy-idpor algo como .k="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"

informação relacionada