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 keychain
que 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-add
Depois 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.
- O que são
ssh-agent
,, e como eles interagemssh-add
entre si?keychain
Keychain Access.app
- 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?
- 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 sshd
durante 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-agent
ou ssh-add
manualmente. 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-agent
que você nunca seja solicitado novamente.
Isso é resolvido com uma launchd
configuração que escuta conexões no $SSH_AUTH_SOCK
soquete e é iniciada automaticamente ssh-agent
quando necessário; depois disso, ssh-agent
solicita credenciais somente quando precisa abrir uma nova chave.
Se isso não funcionar, certifique-se de ter o launchd
arquivo 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:
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.app
funcionam. 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:
passphrase
refere-se à frase obrigatória ao acessar sua chave privada SSH.password
refere-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-add
Mac .keychain
Keychain Access.app
ssh-agent
é o serviço crítico para permitir o uso da chave privada SSH sem digitar a senha SSH.ssh-agent
funciona 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-agent
encontrará 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 é adicionadassh-agent
inicialmente.ssh-add
faz parte dassh-agent
coleção, que ajuda a gerenciar suas chaves SSH nossh-agent
. Usamosssh-add
o comando para listar, adicionar e remover chaves privadas no chaveiro do agente ssh. Em seguida,ssh-add
comunica-se comssh-agent
o serviço para cumprir as tarefas.keychain
é um script para encontrarssh-agent
o serviço (se não existir, iniciar um novo) e chamarssh-add
para adicionar chaves privadas SSH.keychain
tem uma ideia simples e direta, funcionando bem no Linux, onde o ssh-agent geralmente não inicia automaticamente.Keychain Access.app
parece 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, noKeychain Access.app
chaveiro de . Então, da próxima vez que você usar chaves privadas para autenticação,Keychain Access.app
uma janela aparecerá novamente, perguntando se você concede o privilégio. Depois de receber um grande sim,keychain Access.app
adicione sua chave privada aossh-agent
armazenamento de.
Duas coisas merecem sua atenção:
- O Mac OS X Lion inicia automaticamente um
ssh-agent
serviço na inicialização, escutando em um soquete em/tmp
. Keychain Access.app
armazena sua senha SSH, para que possa adicionar sua chave privadassh-agent
sem 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 .pub
no 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_key
por 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-id
por algo como .k="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"