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:

Executando comandos remotamente dentro de uma rede linux com o SSH

Às vezes queremos executar um comando em uma máquina remota sem ter que logarmos nela. Isso é possível utilizando o SSH. O diferencial neste caso é que, ao invés de logarmos na máquina com o SSH, o utilizamos apenas para executar o comando desejado. Por exemplo:

Um login comum utilizando o SSH e dispondo de compressão (modificador C) e a parte gráfica (modificador X) e executando um comando em seguida:

ssh usuario@maquina -XC
$ comando

Agora o mesmo procedimento, mas sem a necessidade de login:

$ comando usuario@maquina:/pasta/desejada

Agora um exemplo real: Suponha que queiramos copiar um arquivo que está em na máquina local de um local para um outro local na maquina remota.

$ cd /pasta/local/desejada
$ scp arquivo usuario@maquina:/pasta/desejada

Uma outra situação seria aquela em que se deseja executar um programa gráfico em uma máquina que está dentro de uma rede diferente da sua e que por algum motivo, não se consegue obter display. Por exemplo, vamos partir da máquina 1 e executar o programa na máquina 3, sendo que as redes das máquinas 1 e 3 são diferentes (em outras palavras, as máquinas não se enxergam). Para isto, vamos precisar de uma segunda máquina, que nos sirva de ponte entre as máquinas 1 e 3:

SSH na máquina 1:

$ ssh usuario@maquina1 -XC

SSH na máquina 2:

$ ssh usuario@maquina2 -XC

SSH na máquina 3:

$ ssh usuario@maquina3 -XC

Execução do comando X (um comando qualquer que abra a parte gráfica, por exemplo o editor de textos nedit):

usuario@maquina3 $ nedit
Cannot open display.

Isso pode acontecer ou porque a variável DISPLAY não está ajustada corretamente. A variável DISPLAY permitirá, por exemplo, exportar o display da máquina 3 para a máquina 2 ou qualquer outra máquina que se tenha acesso e que consiga enxergar a máquina 3. Em outro caso em que o export do display da máquina 3 não funcionar (por algum motivo…), pode-se tentar executar o comando “nedit” (ou qualquer outro que abra a parte gráfica), via SSH:

SSH na máquina 1:

$ ssh usuario@maquina1 -XC

SSH na máquina 2:

$ ssh usuario@maquina2 -XC

Execução do comando “X” (que pode ser, por exemplo, o nedit) via SSH:

usuario@maquina2 $ ssh maquina3 "nedit"

Pimba, e de repente tudo funciona! O que acontece é que, quando se executa o comando “X” através do SSH, o display é automaticamente exportando para a máquina em que se executa o comando, no caso a máquina 2. Não é garantido que irá funcionar, mas para uma necessidade que tive funcionou. Tudo pode depender da topologia das redes e das permissões de acesso.

Transferindo graficamente arquivos via ftp seguro

Esta dica é bastante rápida, mas muito útil. Quem trabalha com redes e com várias máquinas (considere máquinas bastante distintas em termos de configuração e software) sabe que nem sempre é tranquilo copiar ou mover arquivos pela rede. Na linha de comando, temos vários programas dedicados a esta tarefa, como o mais simples ftp, o mais aprimorado sftp e o mais completo ncftp. Todos eles fazem a mesma coisa, com a diferença nos recursos que oferecem. O que nem todo mundo sabe é podemos transferir arquivos entre máquinas diferentes utilizando uma ferramenta gráfica muito simples e conhecida: o gerenciador de arquivos. Ok, se isso for muito óbvio para você, me desculpe, mas estou falando de usar o sftp em conjunto com o nautilus do Gnome!

Para encurtar a história, considere que você precisa selecionar alguns arquivos dentre vários que estão na máquina A para a máquina B. Pelo terminal, isto pode ser uma tarefa bem simples também, mas a possibilidade de se utilizar o mouse neste tipo de operação, pode ser de grande valia.

Para poder utilizar o sftp (ftp sobre ssh) em conjunto com o nautilus, basta digitar o nome de usuário@maquina/pasta na barra de endereço, como na imagem a seguir:

Esta dica é bastante rápida, mas muito útil. Quem trabalha com redes e com várias máquinas (considere máquinas bastante distintas em termos de configuração e software) sabe que nem sempre é tranquilo copiar ou mover arquivos pela rede. Na linha de comando, temos vários programas dedicados a esta tarefa, como o mais simples ftp, o mais aprimorado sftp e o mais completo ncftp. Todos eles fazem a mesma coisa, com a diferença nos recursos que oferecem. O que nem todo mundo sabe é podemos transferir arquivos entre máquinas diferentes utilizando uma ferramenta gráfica muito simples e conhecida: o gerenciador de arquivos. Ok, se isso for muito óbvio para você, me desculpe, mas estou falando de usar o sftp em conjunto com o nautilus do Gnome!

Para encurtar a história, considere que você precisa selecionar alguns arquivos dentre vários que estão na máquina A para a máquina B. Pelo terminal, isto pode ser uma tarefa bem simples também, mas a possibilidade de se utilizar o mouse neste tipo de operação, pode ser de grande valia.

Para poder utilizar o sftp (ftp sobre ssh) em conjunto com o nautilus, basta digitar o nome de usuário@maquina/pasta na barra de endereço, como na imagem a seguir:

No KDE:

fish://usuario@maquina/pasta/onde/estao/os/arquivos

No Gnome:

sftp://usuario@maquina/pasta/onde/estao/os/arquivos

Outro recurso do nautilus que agragado ao uso do sftp ajuda bastante é o painel extra (basta pressionar F3 ou ir na barra de menus e apontar para View>Extra Pane). Assim fica bem fácil de selecionar e copiar/mover os arquivos desejados!