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 eu, 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 apenas uma vez na inicialização, em seguida, memorize-a e automaticamente usando minha chave privada em sessões posteriores de SSH?
Existe um script chamado keychain
, que funciona bem no Gentoo Linux. Mas eu nunca descobri no Mac OS X Lion. Além disso, há muitos termos intimidadores, 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
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 "[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, eu 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 se conectar ao host remoto (localhost 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 se conectar 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!