Eu uso o Mac OS X Lion e conecto hosts remotos via SSH todos os dias. Apesar do fato de eu usar o par de chaves SSH para autenticação remota e eu não precisar motorizar a frase de login de cada host, ainda é muito chato que o terminal peça a senha para acessar minha chave privada SSH.
Por razões de segurança, creio que uma senha para acessar a chave privada do SSH é obrigatória. Existe uma maneira que faça com que o terminal peça a frase exatamente uma única vez na inicialização, depois a memorize e automaticamente usando minha chave privada em sessões SSH posteriores?
Existe um script chamado keychain
que funciona bem no Gentoo Linux. Mas eu nunca descobri no Mac OS X Lion. Além do mais, existem tantos termos intimidante, tais 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, cheguei ao StackExchange, procurando alguns conselhos sobre as seguintes perguntas.
- O que são
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
e como eles interagem uns com os outros? - Como posso inserir a frase secreta da minha chave privada SSH uma vez no login e usá-la livremente na criação posterior da sessão SSH?
- Errr ... O que há de errado com isso
Keychain Access.app
? Não armazena a frase SSH como antes.
Eu listo o que fiz aqui. Espero que haja pistas sobre os passos que perdi.
Etapa 1. Crie um par de chaves SSH no meu Mac.
$ ssh-keygen -t rsa -C "me@email.com"
# 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 (host local aqui), via 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. Efetue logout do host remoto e tente conectar-se a ele novamente. Porra, o terminal pede a frase SSH novamente.
Uma pergunta frequente é que "O ssh-agent funciona bem no seu Mac?". Francamente falando, eu não tenho ideia do que está acontecendo nessas coisas. Aqui mostra 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!