Use OpenSSH para fornecer um ambiente seguro para execução de terminais remotos. O uso básico do OpenSSH e do terminal é muito simples, mas este artigo também abordará outros elementos que permitem login automático em hosts remotos, maneiras de executar aplicativos remotos e como copiar arquivos com segurança entre hosts.
Sobre esta série
O administrador UNIX® típico possui um conjunto de utilitários, conhecimentos e sistemas importantes que são frequentemente usados para auxiliar no processo administrativo. Existem vários utilitários importantes, cadeias de linha de comando e scripts para agilizar diferentes processos. Algumas dessas ferramentas vêm do sistema operacional, mas a maior parte do conhecimento vem da experiência de longo prazo e da necessidade de reduzir o estresse no trabalho do administrador do sistema. Esta série de artigos concentra-se em aproveitar ao máximo as ferramentas disponíveis em vários ambientes UNIX, incluindo maneiras de simplificar tarefas administrativas em ambientes heterogêneos.
Por que usar o OpenSSH?
Os serviços de rede padrão que você usa todos os dias, como FTP, Telnet, RCP, Remote Shell (rsh), etc., funcionam bem em um ambiente fechado, mas as informações transmitidas pela rede usando esses serviços não são criptografadas. Qualquer pessoa que use um sniffer de pacotes em sua rede ou em um computador remoto pode visualizar as informações trocadas e, às vezes, até informações de senha.
Além disso, com todos esses serviços, as opções para automatizar o processo de login são limitadas e muitas vezes dependem da incorporação de uma senha de texto simples na linha de comando para executar instruções, tornando o processo de login ainda mais inseguro.
O protocolo Secure Shell (SSH) foi desenvolvido para contornar essas limitações. O SSH fornece criptografia para todo o canal de comunicação, incluindo troca de credenciais de login e senha, e funciona com chaves públicas e privadas para fornecer autenticação automatizada para logins. Você também pode usar SSH como protocolo de transporte subjacente. Usar SSH dessa forma significa que, após a abertura de uma conexão segura, todos os tipos de informações podem ser trocados pelo canal criptografado, e até mesmo HTTP e SMTP podem usar esse método para proteger o mecanismo de comunicação.
OpenSSH é uma implementação gratuita dos protocolos SSH 1 e SSH 2. Ele foi originalmente desenvolvido como parte do sistema operacional OpenBSD (Berkeley Software Distribution) e agora é lançado como uma solução geral para UNIX ou Linux® e sistemas operacionais similares.
Instale o OpenSSH
OpenSSH é um software gratuito e pode ser baixado do site principal do OpenSSH (consulte Recursos). Os sistemas OpenSSH podem ser construídos a partir do código-fonte em uma variedade de sistemas, incluindo Linux, HP-UX, AIX®, Solaris, Mac OS X e muito mais. Geralmente é possível encontrar binários pré-compilados para a plataforma e versão escolhida. Alguns fornecedores até fornecem kits de ferramentas OpenSSH como parte do sistema operacional.
Para construir OpenSSH você precisa do seguinte:
Se você precisar usar as definições de configuração padrão, use a sequência de construção normal, conforme mostrado na Listagem 1 abaixo.
$ ./configure $ fazer $ fazer instalação |
Isso instala binários, bibliotecas e arquivos de configuração no diretório /usr/local, por exemplo, binários em /usr/local/bin e arquivos de configuração em /usr/local/etc. Se você deseja integrar várias ferramentas ao ambiente principal, pode ser necessário especificar a opção --prefix para definir o diretório base e a opção --sysconfdir para definir o local do arquivo de configuração:
$ ./configure --prefix=/usr --sysconfidir=/etc/ssh |
Algumas outras opções gerais que você pode especificar incluem:
Após concluir a configuração, use make para compilar normalmente.
Após a conclusão do processo de construção e instalação, você precisa configurar o sistema criando primeiro uma chave SSH que identifica exclusivamente o sistema e, em seguida, habilitando a comunicação segura entre o cliente e o host. Você pode executar:
$ faça a chave do host |
Alternativamente, você pode executar as etapas individuais manualmente na linha de comando. Você precisa criar três chaves (uma para cada um dos principais algoritmos de criptografia: rsa1, rsa e dsa). Por exemplo, a Listagem 2 mostra como criar a chave rsa1.
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key Gerando par de chaves rsa1 pública/privada. Digite a senha (vazia se não houver senha): Digite a mesma senha novamente: Sua identificação foi salva em /etc/ssh//ssh_host_key. Sua chave pública foi salva em /etc/ssh//ssh_host_key.pub. A impressão digital principal é: 43:aa:58:3c:d8:30:de:43:af:66:2a:b2:8d:02:08:86 raiz@host remoto |
Sua senha será solicitada. Para a chave do host, você provavelmente não precisa da senha da chave, então você pode pressionar Return para usar uma senha vazia. Alternativamente, você pode usar a opção -N na linha de comando para acelerar o processo (veja a Listagem 3).
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N "" Gerando par de chaves rsa1 pública/privada. Sua identificação foi salva em /etc/ssh/ssh_host_key. Sua chave pública foi salva em /etc/ssh/ssh_host_key.pub. A impressão digital principal é: a3:e3:21:4f:b5:9f:ff:05:46:66:bc:36:a1:47:a0:64 raiz@host remoto |
Agora repita o processo para criar as chaves rsa e dsa (consulte a Listagem 4).
$ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" $ ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N "" |
Isto criará dois arquivos para cada tipo de chave: a chave pública (em um arquivo que termina em .pub) e a chave privada. Você deve garantir que a chave privada seja lida apenas pelos processos root e SSH - isso deve ser configurado automaticamente. Talvez você queira copiar a chave pública para um local central em um compartilhamento do Network File System (NFS) para que as pessoas possam adicioná-la à lista de chaves de host conhecidas.
Finalmente, você precisa iniciar o processo sshd e configurá-lo para ser executado na inicialização. Para hosts Linux, você pode encontrar o script de inicialização apropriado em contrib/redhat/sshd.init que pode ser adicionado a /etc/init.d.
Usando SSH para acesso básico ao terminal
A função principal do OpenSSH é ser uma ferramenta SSH, uma alternativa segura ao protocolo Telnet para login remoto seguro em hosts UNIX ou Linux.
Para se conectar a um host remoto usando o shell padrão, basta digitar o nome do host:
$ ssh host remoto |
Por padrão, o sistema tenta usar o nome de usuário atual como nome de login. Para usar um nome de login diferente, preceda o nome do host com o nome de login, separado pelo símbolo @. Por exemplo:
$ ssh mc@host remoto |
Sua senha de usuário será solicitada - isso é semelhante ao Telnet.
Na primeira vez que você se conectar a um host, será perguntado se deseja salvar uma cópia da chave pública do host remoto em um arquivo de "hosts conhecidos" (consulte a Listagem 5).
$ ssh raiz@host remoto A autenticidade do host 'remotehost (10.211.55.3)' não pode ser estabelecida. A impressão digital da chave RSA é cc:c8:8b:75:3d:b6:00:2f:a9:9c:53:4c:03:0f:3d:1b. Tem certeza de que deseja continuar se conectando (sim/não)? Aviso: 'remotehost' (RSA) adicionado permanentemente à lista de hosts conhecidos. |
No futuro, você não receberá este aviso, mas o aviso será emitido quando o sistema detectar que a chave pública retornada pelo host remoto não corresponde à chave pública no arquivo do host, indicando um possível ataque de hacker. Também pode significar que o administrador apenas regenerou a chave do host.
Essencialmente, não há diferença entre sessões SSH e Telnet, exceto que as sessões SSH são criptografadas, tornando quase impossível para alguém espionar sua sessão ou saber sua senha ou os comandos e operações que você está executando.
Você também pode usar SSH para executar comandos diretamente no host remoto sem usar um shell. Por exemplo, para executar o comando who no host remoto, consulte a Listagem 6.
Listagem 6. Executando o comando who no host remoto$ ssh mc@host remoto quem console de administração 23 de novembro 14:04 mc ttyp1 2 de dezembro 10:53 (sulaco.mcslp.pri) mc ttyp2 10 de dezembro 06:50 (sulaco.mcslp.pri) administrador ttyp3 12 de dezembro 13:33 mc ttyp4 15 de dezembro 12:38 (nautilus.mcslp.p) |
A execução remota também emula a entrada, saída e erro padrão do host cliente. Isso significa que você pode redirecionar a saída para um comando remoto. Por exemplo, você pode anexar informações diretamente a um arquivo remoto canalizando a saída do comando para SSH no host remoto (consulte a Listagem 7).
Listagem 7. Anexando informações diretamente a um arquivo remoto$ echo "Olá Mundo" |ssh mc@remotehost 'cat >> helloworlds.txt' |
Você pode usar este método para aumentar sua produtividade ao usar SSH para simplificar o processo de login.
Troca de arquivos usando SFTP
O comando sft é uma alternativa ao FTP que utiliza o canal de comunicação seguro fornecido pelo protocolo SSH.
Para abrir uma conexão SFTP, especifique o nome do host na linha de comando:
$ sftp host remoto |
Tenha em mente que o comando acima pressupõe que você deseja usar o mesmo método de login do seu host atual. Para usar um método de login diferente, adicione o nome de usuário ao nome do host:
$ sftp mc@host remoto |
Embora o SFTP funcione de forma semelhante ao FTP, existem algumas limitações e diferenças. Por exemplo, dir no FTP fornece uma longa lista de arquivos (consulte a Listagem 8).
ftp> diretório 502 'EPSV': comando não compreendido. 227 Entrando no modo passivo (192.168.0.110.150.159) 150 Abrindo conexão de dados no modo ASCII para listagem de diretórios. total 1472 drwx ------ 3 mc staff 102 4 de novembro 11:17 Desktop drwx ------ 3 mc staff 102 4 de novembro 11:17 Documentos drwx ------ 18 mc staff 612 5 de novembro 18:01 Biblioteca drwx ------ 3 mc staff 102 4 de novembro 11:17 Filmes drwx ------ 3 mc staff 102 4 de novembro 11:17 Música drwx ------ 4 mc staff 136 4 de novembro 11:17 Fotos drwxr-xr-x 4 mc equipe 136 4 de novembro 11:17 Público drwxr-xr-x 6 mc staff 204 4 de novembro 11:17 Sites drwxrwxrwx 3 equipe raiz 102 24 de dezembro 07:30 tmp drwxr-xr-x 7 root staff 238 11 de dezembro 08:39 teste 226 Transferência concluída. |
No SFTP, dir atua como um alias para o comando de listagem de diretórios do host, que é ls no UNIX ou Linux. Por padrão, dir fornece apenas uma lista curta (consulte a Listagem 9).
sftp> diretório Desktop Documentos Biblioteca Filmes Música Imagens Públicas Teste tmp de sites |
Para obter uma lista longa, use as mesmas opções de ls (consulte a Listagem 10).
sftp> dir -l drwx ------ 3 mc staff 102 4 de novembro 11:17 Desktop drwx ------ 3 mc staff 102 4 de novembro 11:17 Documentos drwx ------ 18 mc staff 612 5 de novembro 18:01 Biblioteca drwx ------ 3 mc staff 102 4 de novembro 11:17 Filmes drwx ------ 3 mc staff 102 4 de novembro 11:17 Música drwx ------ 4 mc staff 136 4 de novembro 11:17 Fotos drwxr-xr-x 4 mc equipe 136 4 de novembro 11:17 Público drwxr-xr-x 6 mc staff 204 4 de novembro 11:17 Sites drwxrwxrwx 3 equipe raiz 102 24 de dezembro 07:30 tmp drwxr-xr-x 7 root staff 238 11 de dezembro 08:39 teste |
Outros comandos, como alterar diretórios (cd, lcd localmente), criar diretórios (mkdir) e enviar (put) e receber (get) arquivos permanecem inalterados. Os dois últimos comandos, put e get, aceitam curingas (semelhantes a mput e mget no FTP), mas tome cuidado ao transferir vários arquivos sem curingas no SFTP. Por exemplo, sftp> mget file1 file2 file3 é reconhecido como uma tentativa de obter o arquivo1 e o arquivo2 e colocá-los no diretório local file3, mas esse diretório pode não existir.
Copie arquivos entre hosts usando scp
O comando scp funciona de forma semelhante ao comando rc, exceto que usa o protocolo SSH para transferir arquivos. Ao transferir arquivos relacionados ao conteúdo ou trocar arquivos automaticamente na Internet, o scp é muito melhor.
Seu formato é semelhante ao rcp; você especifica o caminho do arquivo a ser copiado e o nome do host deve ser mesclado nele, se necessário. Por exemplo, para copiar um arquivo .bashrc de um host remoto para sua máquina local, use:
$ scp host remoto:/users/mc/.bashrc ~/.bashrc |
Como antes, para especificar um nome de usuário a ser usado, preceda o host com o nome de usuário, separado pelo símbolo @:
$ scp mc@remotehost:/users/mc/.bashrc ~/.bashrc |
Supondo que o usuário ao qual você está se conectando tenha permissões de leitura, você também precisará usar o metacaractere ~ para acessar as informações em seu diretório inicial.
$ scp mc@host remoto:~mc/.bashrc ~/.bashrc |
Para copiar do diretório inicial do usuário logado, use:
$ scp mc@remotehost:.bashrc ~/.bashrc |
O comando scp também oferece suporte a regras de expansão padrão. Então, para copiar todos os arquivos .bash*, você pode usar:
$ scp mc@host remoto:.bash* ~ |
Você pode até selecionar arquivos individuais mais especificamente usando chaves de expansão ({}):
$ scp mc@remotehost:".bash{rc,_path,_aliases,_vars}" ~ |
Observe que as chaves de expansão no caminho do arquivo (não a expressão completa do caminho remoto) estão entre aspas duplas.
Em todos os exemplos acima, será solicitada a senha do host remoto. Isso pode ser evitado fornecendo ao host a parte pública de sua chave pessoal.
Habilite o login automático usando chave pública
Ao fazer login em um sistema remoto usando ssh, sftp ou scp, você ainda precisará de uma senha para concluir o processo de login. Ao criar uma chave pública ou privada, anexar a parte pública da chave ao arquivo ~/.ssh/authorized_keys e trocar uma chave válida com o site remoto, você pode eliminar a necessidade de fornecer uma senha e permitir o login automático.
Para criar uma chave pública ou privada, você precisa usar ssh-keygen para especificar o tipo de criptografia de chave. O tipo de chave rsa é usado na demonstração, mas outros tipos de chave também são válidos. Para criar a chave, consulte a Listagem 11.
$ ssh-keygen-trsa Gerando par de chaves RSA pública/privada. Insira o arquivo no qual deseja salvar a chave (/root/.ssh/id_rsa): |
Você deve inserir a localização do arquivo que contém as chaves (componentes públicos e privados). Usar o padrão (no diretório .ssh em seu diretório inicial) geralmente é adequado (consulte a Listagem 12).
Diretório criado '/root/.ssh'. Digite a senha (vazia se não houver senha): |
Se você inserir uma senha neste estágio, um arquivo de chave de segurança será criado, mas você também deverá inserir a senha sempre que usar a chave. Pressionar Return significa que nenhuma senha é necessária (consulte a Listagem 13).
Listagem 13. Ignorando a exigência de senha pressionando ReturnDigite a mesma senha novamente: Sua identificação foi salva em /root/.ssh/id_rsa. Sua chave pública foi salva em /root/.ssh/id_rsa.pub. A impressão digital principal é: 98:da:8d:48:a8:09:44:b1:b3:62:51:2d:a9:6b:61:ba raiz@host remoto |
A chave pública (id_rsa.pub) e a chave privada correspondente (id_rsa) foram criadas.
Para ativar o login automático, você deve copiar o conteúdo da chave pública para o arquivoauthorized_keys no diretório ~/.ssh no host remoto. Você pode automatizar isso usando SSH (consulte a Listagem 14).
$ cat ./.ssh/id_rsa.pub | |
Além disso, se você fizer isso com frequência em vários hosts, poderá usar um pequeno script ou função shell para executar todas as etapas necessárias, conforme mostrado na Listagem 15.
OLDDIR='senha'; se [ -z "$1"]; echo Precisa de informações do usuário@host; saída; fi; cd$HOME; se [ -e "./.ssh/id_rsa.pub" ]; gato ./.ssh/id_rsa.pub | outro ssh-keygen-trsa; gato ./.ssh/id_rsa.pub | fi; cd$OLDDIR |
Você pode usar o script setremotekey para copiar uma chave existente ou, se a chave não existir, crie uma antes de copiar:
$ setremotekey mc@host remoto |
Agora, sempre que precisar fazer login em um host remoto usando uma chave pública, você poderá usar um script de chave pessoal em combinação com uma lista de chaves aceitas por esse usuário no host remoto.
Resumir
OpenSSH é uma ferramenta importante que protege as comunicações e transferências de informações entre computadores. Não é apenas uma alternativa segura às ferramentas convencionais como Telnet, FTP e RCP, mas também pode servir como protocolo de transporte para outros serviços como Subversion, X Windows System e rsync. Este artigo mostra as etapas básicas necessárias para colocar o OpenSSH em funcionamento, como usar melhor as principais ferramentas fornecidas pelo OpenSSH e como usar ferramentas de troca de chaves para simplificar problemas de login e conectividade.