SSH sem senha no OS X Mountain Lion

O SSH é um serviço de rede que permite fazer um login seguro em máquinas remotas. Basicamente, informa-se o login, o nome (ou endereço) da máquina à qual deseja-se conectar e depois a senha. Dependendo do uso que se faz do SSH, pode ser necessário e/ou conveniente configurar o software para guardar as senha com uma chave pública de forma que o login é feito de forma automática, sem a necessidade de perdir uma senha a cada pedido de login. De forma semelhante, quando trabalha-se com processamente paralelo utiizando, por exemplo, o MPI, é necessário que a máquina seja configurada para fazer o login no localhost sem pedir senha. Neste caso, isto acontece porque cluster são geralmente configurados em rede e para que a compilação possa aproveitar os processadores das diferentes máquinas localmente, é necessário que todas as máquinas sejam acessíveis na rede. Você consegue imaginar como seria a compilação e a execução de uma grande software de forma paralela em um ambiente de rede e tendo que digitar a senha de login das máquinas a todo instante? No caso dos processadores multicore, a situação é bastante semelhante: os softwares que podem tirar vantagem de máquinas com este tipo de processadore, enxergam cada um dos cores como um processador independente. Então, torna-se necessário configuarar a máquina em questão para que ela possa acessar ela mesma através do terminal via SSH. Confuso? É um pouco, mas é bastante simples.

Em uma máquina Linux, podemos gerar uma chave pública com os seguintes comandos:

$ ssh-keygen -t rsa 
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys2

No OS X Mountain Lion, o processo é bastante semelhante e requer uma configuração adicional:

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Mas para que tudo funcione, é preciso configurar o OS X Mountain Lion para permitir logins remotos. Para isto, basta abrir o painel de “Preferências do Sistema” (System Preferences), clicar no ícone “Compartilhamento” (Sharing) e marcar a opção “Login Remoto” (Remote Login).

Painel de Preferências do Sistema

Depois disso, basta testar:

$ ssh localhost

Referências:

Utilizando o SSH sem senha no linux

O SSH ou “Secure SHell” é um programa cliente/servidor (no sentido de que pode-se executar apenas o cliente – o básico, ou o servidor – o completo) que permite o usuário fazer conexões remotas utilizando o shell do linux de forma segura. Um recurso bastante interessante do SSH é que ele pode ser executado sem senha, o que facilita bastante a vida de quem precisa desse recurso, como por exemplo, em ambientes de execução de códigos paralelizados, em que são necessárias conexões seguras entre os nós de processamento, que são feitas via SSH. Então, para habilitar este recurso (ssh sem senha), basta seguir os passos abaixo (considerando a utilização do Ubuntu ou algum derivado do Debian):

Instalar o servidor do SSH

$ sudo apt-get install openssh-server

Criar uma chave pública do SSH

$ ssh-keygen -t rsa

* Neste passo, pode-se aceitar tanto a passphrase em branco quanto o local de armazenamento da chave, geralmente em $HOME/.ssh

Adicionar o conteúdo da chave para o arquivo que será lido pelo servidor (authorized_keys)

$ cd $HOME/.ssh
$ cat id_rsa.pub >> authorized_keys

Teste do ssh na máquina local (localhost)

$ ssh localhost whoami

Os provedimentos acima funcionam apenas para a máquina local. Caso queira-se fazer com que o acesso à um servidor ou máquina remota funcione da mesma forma, basta copiar a chave pública id_rsa.pub para o servidor (ou máquina local) e adicionar o seu conteúdo ao arquivo authorized_keys da máquina remota.

Copiando o arquivo id_rsa.pub para a máquina remota utilizando o comando SCP:

$ cd $HOME/.ssh
$ scp id_rsa.pub usuario@servidor/.ssh/id_rsa.pub.localhost
$ ssh usuario@servidor
$ cd $HOME/.ssh
$ cat id_rsa.pub.localhost >> authorized_keys

Vale lembrar que a instalação do openssh-server é crucial para o funcionamento do SSH sem senha na máquina local, apenas.