Você está na página 1de 18

SSH - Dicas, truques e um tutorial sobre o protocolo

segurana, o telnet completamente inseguro, alm de fornecer diversas outras funcionalidades que o telnet no possui. Por isso, vamos disponibilizar um resumo a respeito de sua histria, e um tutorial do seu uso. O material usado uma traduo livre (com alguns muitos acrscimos) do artigo "SSH tips, tricks & protocol tutorial" publicado por Damien Miller (djm@mindrot.org)" e apresentado na site onde o artigo est esta caso algum se interesse em ver o texto original.

O que SSH?

SSH (Secure SHell) um protocolo de redes feito para substituir as ferramentas inseguras de login e execuo de comandos remotos como telnet, rlogin e rsh. Acessar um sistema atravs de algum mtodo como o telnet coloca tudo que voc enviar e receber pois os dados so enviados atravs de texto puro. E sua sesso completamente visvel para qualquer outro na sua rede e na rede da mquina que voc estiver acessando. Isso faz

com que qualquer um possa monitorar e roubar ("sniffing") qualquer dado transmitido nessa conexo, como nome de usurio, senha, emails que voc ler, comandos enviados, etc. Por essas razes, voc precisa de algum sistema mais sofisticado para realizar a conexo remota. transmisso em ambas as direes. O SSH tambm oferece vrias funcionalidades teis: Compresso: o trfego pode ser comprimido a nvel bsico. Chave pblica de autenticao: pode, opcionalmente, substituir a autenticao por senha. Autenticao do servidor: o que faz o ataque "homem-no-meio" mais difcil. Encaminhamento de portas: Sesses arbitrrias de TCP podem ser encaminhadas por uma conexo TCP. Encaminhamento X11: SSH pode encaminhar suas sesses do X11 (iniciar sesses no X via rede). Transferncia de arquivos: a famlia do protocolo SSH inclui dois protocolos exclusivos para transferncia de arquivos.

Histria
lanado sob a licena de cdigo fonte aberto. As verses seguintes foram tomando licenas mais restritas, porm elas no geral continuaram gratuitas para uso no comercial. Tatu ento formou a SSH Communications security, a qual vende verses comerciais do SSH at hoje. As verses mais antigas do cdigo implementado por ele so o que hoje chamamos de SSH verso 1.0. Internet com o apoio da IETF. O que levou a criao da verso 2 do SSH. Na reimplementao, o protocolo foi dividido numa camada de transporte, e num protocolo de conexo e autenticao. Muitas falhas de segurana foram descobertas nesse processo. Em 1999, a equipe do OpenBSD descobriu o cdigo fonte das primeiras verses do SSH (atravs do OSSH2) feitas por Tatu Ylnen. A equipe adaptou o cdigo para os padres modernos e gerou o que ficou chamado de OpenSSH. O OpenSSH foi inserido no OpenBSD 2.6 em Dezembro de 1999. OpenSSH foi expandido por Markus Friedl para prover suporte ao SSH v.2 no comeo de 2000. Aps isso, o OpenSSH se tornou, e continua a ser, a distribuio gratuita e mais popular, completa e portvel. Inclusa em muitas distribuies de sistemas operacionais. A histria completa do OpenSSh est documentada aqui (em ingls).

O bsico do uso do SSH


Login remoto

A sintaxe bsica para logar em um host remoto : 1 ssh hostname Se voc quiser adicionar um nome de usurio, voc precisa utilizar o formato do rlogin: 1 ssh -l user hostname Ou, numa forma mais simples: 1 ssh user@hostname Caso seu sshd(servidor ssh) esteja sendo executado numa porta diferente da padro, voc pode especificar a porta na linha de comando: 1 ssh -p 2222 user@hostname

Descoberta inicial de chave do servidor


Na primeira vez em que voc tenta conectar a um servidor ssh com o seu cliente, ele te pergunta para verificar a chave do servidor. 1 [djm@roku djm]$ ssh root@hachi.mindrot.org The authenticity of host hachi.mindrot.org (203.36.198.102) 2 cant be established. RSA key fingerprint is 3 cd:41:70:30:48:07:16:81:e5:30:34:66:f1:56:ef:db. 4 Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added localhost (RSA) to the list of 5 known hosts. 6 root@hachi.mindrot.orgs password: 7 Last login: Tue Aug 27 10:56:25 2002 8 [root@hachi root]# oportunidade de capturar sua senha e o contedo de sua sesso. Uma vez que voc tenha verificado a chave do servidor, ela salva pelo seu cliente, geralmente, no arquivo ~/.ssh/known_hosts para que uma verificao automtica possa ser feita em toda tentativa de conexo. Se a chave do servidor mudar, o cliente exibe um aviso: 01 [djm@roku djm]$ ssh hachi 02 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

03 @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ 04 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 05 06 IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the07 middle attack)! It is also possible that the RSA host key has just been 08 changed. 09 10 The fingerprint for the RSA key sent by the remote host is 11 cd:41:70:30:48:07:16:81:e5:30:34:66:f1:56:ef:db. 12 Please contact your system administrator. 13 Add correct host key in /home/djm/.ssh/known_hosts to get rid of 14 this message. 15 Offending key in /home/djm/.ssh/known_hosts:24 RSA host key for localhost has changed and you have requested 16 strict checking. 17 18 Host key verification failed.

Executando comandos remotamente


SSH tambm suporta a execuo de comandos remotamente. Quando voc faz login, um pseudoterminal associado a sua sesso at voc efetuar log out ou ser derrubado pelo servidor. Uma lista de comandos que so usados comumente via ssh: 1 [djm@roku djm]$ ssh root@hachi.mindrot.org "ls -C /bin" 2 root@hachi.mindrot.orgs password: 3 [ cpio echo ksh mv rm sleep 4 cat csh ed ln pax rmail stty 5 chgrp date eject ls ps rmd160 sync 6 chio dd expr md5 pwd rmdir tar 7 chmod df hostname mkdir rcp sh test 8 cp domainname kill mt rksh sha1 Caso voc queira especificar qual o terminal vai utilizar (bash, konsole, lxterminal, etc), voc precisa forar o ssh a alocar qual voc quer utilizando o argumento -t: 1 ssh -t user@hostname vi /tmp/foo

Redirecionando comandos de entrada e sada


Voc pode redirecionar os descritores padro de arquivos (stdin, stdout e stderr). O que permite alguns truques bem teis: 1 [djm@roku djm]$ ssh root@hachi.mindrot.org "ls /bin | grep -i rm" 2 root@hachi.mindrot.orgs password:

3 rm 4 rmail 5 rmd160 6 rmdir Neste exemplo, o comando grep executado na mquina remota. Porm, possvel obtm a mesma resposta rodando o grep na mquina local: 1 ssh root@hachi.mindrot.org "ls /bin" | grep -i rm J aqui, note que o grep est fora das aspas. Ou seja, ele executado no cliente. O que realiza um redirecionamento do stdio, que muito til quando estamos trocando dados entre duas mquinas diferentes. No exemplo a seguir, um arquivo SQL hipottico enviado para a mquina remota e retorna a mensageresultado do comando: 1 ssh hachi "psql billing" < billing.sql | grep -v ^INFO Cuidado: um erro muito comum quando redirecionamos a sada de um processo ssh o de haver comandos que do algum retorno em scripts de inicializao que so executados toda vez que o shell iniciado. (e.g. .tcshrc, .kshrc, .bashrc, etc) ao de nos scripts de login (e.g. .prole, .login, .bash prole). Se houver algum comando que produz alguma sada nos scripts de inicializao do shell, a sada deles ser includa junto com a sada dos seus comandos. Eles tambm interrompem transmisso de arquivos via SSH.

Transferncia de arquivos
SSH oferece vrias maneiras de transferir arquivos. A maioria delas se usa do redirecionamento de entrada e sada j mencionados. Alm desses temos mais alguns. scp scp o mecanismo original do SSH para transferir arquivos. Ele modelado com base no rcp (comando para cpia remota) do BSP (protocolo da Xerox PARC anlogo ao TCP). Um protocolo com mais de 25 anos. Sua sintaxe muito simples: 1 scp [user@]host:/path/to/source/file /path/to/destination/file Ele copia um arquivo remoto para um destino local. Para fazer o inverso, copiar um arquivo local para um destino remoto, basta inverter os parmetros do comando: 1 scp /path/to/source/file [user@]host:/path/to/destination/file Em ambos os casos, o nome do arquivo a ser enviado pode ser um curinga referente a vrios arquivos. Se o local para salvar os arquivos for omitido, o diretrio home do usurio ser usado. Por exemplo: 1 scp[user@]host:/home/djm/*.diff O scp no trabalha muito bem com cpias de arquivos entre dois servidores remotos. Embora seja possvel utilizando a seguinte sintaxe: 1 scp [user@]host1:/path [user@]host2:/path Para esse comando funcionar, o host1 deve estar configurado para acessar o host2 sem o uso de login (atravs do uso de chaves pblicas, que so explicadas mais adiante). De qualquer forma, uma

pequena resposta dada ao usurio quanto ao sucesso da operao. scp pode tambm copiar arquivos de forma recursiva: 1 scp -r source-path [user@]host:/destination-path 2 scp -r [user@]host:/source-path /destination-path Enquanto muito til para transferncia simples de poucos arquivos, tem vrias limitaes. A mais incmoda o pssimo tratamento de caracteres que podem ser interpretados pelo shell (como espaos). Por exemplo: [djm@roku djm]$ scp "hachi:/mp3/J.S Bach/Matthaus Passion 1 0101.ogg" /tmp 2 cp: cannot stat /mp3/J.S.: No such file or directory 3 cp: cannot stat Bach/Matthaus: No such file or directory 4 cp: cannot stat Passion: No such file or directory 5 cp: cannot stat 0101.ogg: No such file or directory Nestes casos voc tem que escapar os caracteres problemticos: 1 scp "hachi:/mp3/J.S.\ Bach/Matthaus\ Passion\ 0101.ogg" /tmp Outro problema do scp que necessrio que ele seja capaz de encontrar um binrio dele mesmo na mquina remota. Geralmente, esses comandos so instalados sem problema algum no $PATH dos sistemas remotos, mas se no as transferncias no vo funcionar: 1 [djm@roku djm]$ scp hachi:/tmp/foo /tmp 2 bash: scp: command not found

draft-secsh-lexfer (vulgo sftp) grupo IETF. O resultado foi o protocolo descritos no conjunto de rascunhos para Internet: draftsecsh-lexfer-*. Este protocolo, mais conhecido como sftp, um protocolo genrico para transferncia de arquivos elaborado para ser executado atravs de qualquer sistema de transporte seguro. sftp parece bastante com a API UNIX de leitura de leitura de arquivos, com equivalentes para open(), read(), write(), lseek() assim como readdir() e famlia. Essa similaridade faz com que ele seja considerado mais prximo do NFS que ao protocolos de transferncia de arquivos como o FTP. O OpenSSH inclui um cliente interativo de sftp: 01 [djm@roku ssh-tutorial]$ sftp hachi 02 Connecting to hachi... 03 04 sftp> cd /usr/share/games 05 sftp> ls 06 drwxr-xr-x 8 root wheel 512 Aug 21 19:01 . 07 drwxr-xr-x 22 root wheel 512 Apr 30 2001 .. 08 drwxr-xr-x 2 root wheel 512 Aug 21 19:01 atc 09 drwxr-xr-x 2 root wheel 512 Aug 21 19:01 boggle 10 drwxr-xr-x 2 root wheel 512 Apr 30 2001 ching 11 drwxr-xr-x 2 root wheel 512 Aug 21 19:01 fortune

12 13 14 15 16 17 18 19 20 21 22 23 24

drwxr-xr-x 2 root wheel 512 Aug 21 19:01 larn< drwxr-xr-x 2 root wheel 1024 Aug 21 19:01 quiz.db -r--r--r-- 1 root games 2030 Aug 21 19:01 cards.pck -r--r--r-- 1 root games 10087 Aug 21 19:01 cribbage.instr -r--r--r-- 1 root games 1565 Aug 21 19:01 fish.instr -r--r--r-- 1 root games 1941 Aug 21 19:01 wump.info sftp> lcd /tmp sftp> get c* Fetching /usr/share/games/cards.pck to cards.pck Fetching /usr/share/games/ching to ching Cannot download a directory: /usr/share/games/ching Fetching /usr/share/games/cribbage.instr to cribbage.instr sftp> quit

tar-over-ssh Como falamos antes, ssh pode ser usado para redirecionar entrada e sada entre hosts. Essa capacidade torna fcil a transferncia de arquivos pro meio de utilidades padres do unix como tar e cpio. Estes comandos apresentam vantagens quando voc precisa transferir uma grande quantidade de arquivos, mantendo os atributos dos arquivos e copiar links comuns e simblicos. O exemplo a seguir vai copiar todos os arquivos e diretrios de /usr/share/games no host hachi para /tmp na mquina local. Note que isto vai preservar a estrutura do diretrio e os atributos incluindo os utimes (datas de acesso e alterao), dono, grupo e permisses: [root@roku root]# ssh hachi "cd /usr/share/games ; tar cf 1 ./a*" | \ > (cd /tmp ; tar xpvf -) 2 ./atc 3 ./atc/Atlantis 4 ./atc/Game_List 5 ./atc/Killer 6 ./atc/OHare 7 ./atc/Tic-Tac-Toe Para copiar arquivos locais para um destino remoto, um comando simtrico pode ser usado: 1 (cd /tmp ; tar cf - ./xyz*) | ssh hachi "cd /tmp ; tar xcvf -" Um pequena mudana no exemplo anterior permite gerar um arquivo tar local a partir de um conjunto de arquivos remotos (note que h um passo extra de compresso): 1 ssh hachi "cd /tmp ; tar cvf - ./* | bzip2 -9" > tmp.tar.bz2 automtico, desde que a autenticao com chaves pblicas esteja configurada.

Rsync Rsync um pacote e algoritmo para manter dois conjuntos de arquivos sincronizados. O Rsync envia somente as diferenas entre os dois conjuntos pela rede ao invs de enviar somente os contedos. Ele muitas vezes usado como um sistema, muito bom, de espelhamento de arquivos ou

como um substituto do scp/rcp. O Rsync possui suporte para ssh, o qual pode ser utilizado por uma opo de linha de comando. Podemos us-lo para listar arquivos de diretrios especficos em mquinas remotas: 1 rsync -e ssh djm@hachi:/tmp/ Para sincronizar/copiar um conjunto de arquivos para a mquina local: 1 rsync -ve ssh djm@hachi:/bin/c* /tmp O Rsync tem muitas outras opes e utilidades. Veja as pginas "man" sobre ele para ver melhor os detalhes.

Autenticao por chaves pblicas


O SSH inclui a capacidade de autenticar os usurios atravs de chaves pblicas. Ao invs de exigir um nome de usurio e senha, o servidor vai verificar a chave privada do usurio em comparao com a chave pblica do usurio, armazenada no servidor. Definir uma chave pblica de autenticao requer que voc gere um par de chaves pblica/privada e instalar a poro pblica no servidor. Tambm possvel atribuir privilgios a cada chave e quais hosts/endereos podem se autenticar utilizando-as.

Gerando chaves pblicas

As chaves pblicas so geradas utilizando o ssh-keygen. Ele pode gerar trs tipos de chaves: rsa, dsa e rsa1. As chaves rsa1 so usadas para autenticao pelo SSH 1.0 (o que mantido por questes de compatibilidade com sistemas antigos). J as outras duas so utilizadas pelo SSH 2.0. O tipo da chave a ser gerada escolhida pela opo -t do ssh-keygen. Normalmente prefervel utilizar as chaves rsa pois elas so um pouco mais rpidas de autenticar que as chaves dsa. Exemplo de criao de uma chave rsa: 01 [djm@roku ssh-tutorial]$ ssh-keygen -t rsa 02 Generating public/private rsa key pair. 03 Enter file in which to save the key (/home/djm/.ssh/id_rsa): 04 Created directory /home/djm/.ssh. 05 Enter passphrase (empty for no passphrase): 06 Enter same passphrase again: 07 Your identification has been saved in /home/djm/.ssh/id_rsa. 08 Your public key has been saved in /home/djm/.ssh/id_rsa.pub. 09 The key fingerprint is:

10

3c:7e:41:2c:d2:51:f8:0b:ef:78:e7:e3:22:eb:af:6a djm@roku.mindrot.org

Caso voc queira gerar uma chave sem utilizar uma frase secreta, o que pode ser til em algumas situaes (que sero descritas mais a frente): 1 ssh-keygen -t dsa -N -f ~/.ssh/id_dsa_example

Autenticando com chaves pblicas


Agora que voc j tem seu par de chaves, voc deve instalar a chave pblica no servidor em que voc deseja realizar login. Essa chave armazenada num arquivo com extenso .pub codificado em formato ASCII. Veja como uma dessas chaves: 1 [djm@roku ssh-tutorial]$ cat ~/.ssh/id_rsa.pub ssh-rsa 2 AAAAB3NzaC1yc2EAAAABIwAAAQEAoosorAF8t6k6cmNXiPdP4eE63YFLr/3SjA GLzCKAJ4cWyAPIrIdeaud1e+y5rj+1E6qEYM3Nl6Sju2dL21+ia+toqA2SQCtUrZ 3 TBYVyX 2D4f1x31oK4pTIlWrYzGuj+k3h3tmbr5AdUOk5kxki/xiLRx91gIuWC60qCsYJYV 4 V10H9h 2LRNaSh2YRPptf7aJk+4QcwUuu6QB9g4WBznWWpwj7YeT7n57f38kTbSvatr5hrP 5 WTRFYB qT4LJqvalkrxQNX143uWOmfTMKV2pUBcMWroVR7Xo2d4Gh6VS2rpKxnq+CNjjj12 6 TunVHR 7 qbbdkua5Ml/HbpHubmta/dGkoFrQ== Laptop key Nota: o contedo acima fica todo em uma linha s. Acrescentamos quebras de linha para ficar mais fcil de visualizar e no ferrar com a layout do blog. Para habilitar a autenticao com chaves pblicas, voc precisa copiar a chave pblica para o fim do arquivo ~/.ssh/authorized_keys. O seguinte comando faz isso para voc: ssh hachi "umask 077; cat >> .ssh/authorized_keys" < 1 ~/.ssh/id_rsa.pub O umask restritivo obrigatrio porque o servidor se recusa a ler o arquivo ~/.ssh/authorized_keys se ele tiver permisses pouco restritivas. Uma vez que a chave estiver instalada no seu servidor, voc j deve ser capaz de autenticar usando sua chave privada: 1 [djm@roku ssh-tutorial]$ ssh djm@localhost 2 Enter passphrase for key /home/djm/.ssh/id_rsa: 3 Last login: Thu Aug 29 11:08:29 2002 4 [djm@roku ssh-tutorial]$ Note que foi pedida a frase secreta da chave privada ao invs de pedir a senha do usurio no servidor.

Usando o ssh-agent

Bem, at aqui a autenticao por chaves pblicas no demonstrou nenhuma vantagem - trocamos apenas a necessidade de digitar uma senha por o de digitar uma frase secreta (geralmente muito mais longa que senhas). A soluo para isso o ssh-agent, um pequeno aplicativo que executado uma vez por sesso de login e carrega todas as suas chaves privadas. Ele fornece as chaves automaticamente para o cliente e no ser mais necessrio digitar nada. Para iniciar o ssh-agent, caso ele no esteja configurado no seu sistema, voc precisa adicionar a seguinte linha ao arquivo de inicializao do sistema (o arquivo .profile ou algum similar): 1 test -z "$SSH_AUTH_SOCK" && eval 'ssh-agent -s' Quando executado, o ssh-agent vai emitir uma srie de variveis de ambiente na sada padro. A diretiva eval serve para verificar que as variveis foram importadas para o seu sistema e a diretiva test serve para garantir que no vamos iniciar um processo do ssh-agent. Assim que o ssh-agent estiver trabalhando, voc tem que carregar suas chaves nele atravs do sshadd. Execut-lo sem nenhum argumento resulta numa tentativa de carregar os trs arquivos padres (RSA 1.0, RSA 2.0 e DSA) no agente: 1 [djm@roku ssh-tutorial]$ ssh-add 2 Enter passphrase for /home/djm/.ssh/id_rsa: 3 Identity added: /home/djm/.ssh/id_rsa (/home/djm/.ssh/id_rsa) Adicionadas as chaves ao agente, voc pode realizar login sem precisar autenticar manualmente: 1 [djm@roku ssh-tutorial]$ ssh djm@hachi 2 Last login: Thu Aug 29 12:40:18 2002 from localhost.localdomain O ssh-add serve para verificar quais chaves esto carregadas no agente: 1 [djm@roku ssh-tutorial]$ ssh-add -l 2048 40:a6:0a:59:e9:15:c0:d6:85:87:ec:63:5d:cc:06:ab 2 /home/djm/.ssh/id_rsa (RSA) 2048 39:9f:9c:47:a9:be:94:f6:1e:e6:a5:97:2d:b0:74:c3 3 /home/djm/.ssh-old/id_rsa (RSA) E tambm pode apagar todas as chaves no agente: 1 [djm@roku ssh-tutorial]$ ssh-add -D 2 All identities removed.

Restries em chaves pblicas


Chaves pblicas podem ter restries colocadas no lado do servidor. As mais comuns so os comandos forados. Isto fora o servidor a executar um comando sempre que uma certa chave execute um comando especfico, independente do que for pedido pelo cliente. Isso feito desta forma: 1 [djm@roku ssh-tutorial]$ cat ~/.ssh/authorized_keys command="/bin/ls -l /tmp" ssh-rsa 2 AAAAB3NzaC1yc2EAAAABIwAAAQEAoosorAF 8t6k6cmNXiPdP4eE63YFLr/3SjAGLzCKAJ4cWyAPIrIdeaud1e+y5rj+1E6qEYM3 3 Nl6Sju 2dL21+ia+toqA2SQCtUrZTBYVyX2D4f1x31oK4pTIlWrYzGuj+k3h3tmbr5AdUOk 4 5kxki/ xiLRx91gIuWC60qCsYJYVV10H9h2LRNaSh2YRPptf7aJk+4QcwUuu6QB9g4WBznW 5 Wpwj7Y 6 eT7n57f38kTbSvatr5hrPWTRFYBqT4LJqvalkrxQNX143uWOmfTMKV2pUBcMWroVR7Xo2d 4Gh6VS2rpKxnq+CNjjj12TunVHRqbbdkua5Ml/HbpHubmta/dGkoFrQ== Laptop 7 key Neste exemplo, sempre que a chave especificada for usada num login, o comando /bin/ls -l /tmp ser executado: 1 [djm@roku ssh-tutorial]$ ssh djm@hachi netstat 2 arch date gunzip mv sleep 3 ash dd gzip netstat sort 4 ... Note que o comando especificado na linha de comando, netstat, foi ignorado. O mesmo teria ocorrido se no tivssemos especificado um comando. Quando um comando forado aplicado, o comando original armazenado na varivel de ambiente $SSH_ORIGINAL_COMMAND. Isto pode ser til para scripts que restringem o acesso para um conjunto pr-definido de comandos permitidos. Outra restrio bem til a clausula from="". Ela permite restringir os endereos das mquinas que sero autorizadas a realizar login utilizando a chave dada. Note que esta negao no se impede o usurio de se autenticar por outros meios, por exemplo, com o login e senha. A clausula from apresenta um sistema bsico de coringas: 1 from="192.168.*" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAoosorAF ... O mesmo sistema de restries pode ser usado tambm para variveis de ambiente: 1 environment="FREEDOM=SLAVERY" ssh-rsa AAAAB3NzaC1yc2EAAAABIw ... H muitas outras restries relativas a encaminhamentos e requisies de pseudo-terminais. As quais so importantes se voc quiser restringir completamente uma chave: 1 [djm@roku ssh-tutorial]$ cat ~/.ssh/authorized_keys from="192.168.*",command="cvs server",no-pseudo-terminal,no2 agent-forwarding, no-X11-forwarding,no-port-forwarding ssh-rsa 3 AAAAB3NzaC1yc2EAAAABIwAAAQ 4 ... Essa chave s est autorizada a conectar de 192.168.0.0/16, no pode requisitar um pseudo-

terminal, no pode criar nenhum redirecionamento e forado a usar o comando cvs server. Esta uma excelente forma de fornecer acesso somente leitura ao CVS para desenvolvedores remotos. Extremamente restritivas, chaves sem senha so muito teis para tarefas automatizadas como backup remoto: 1 [djm@roku ssh-tutorial]$ cat ~/.ssh/authorized_keys command="cd /var/cvs ; tar cvf - ./* | bzip2 -9 | gpg --encrypt 2 -r djm@mindrot.org", no-pty,no-agent-forwarding,from="192.168.*",no-X111 forwarding,no-port-forwarding <span style="background-color: white;">ssh-rsa 1 AAAAB3NzaC1yc2EAAAABIwAAAQ</span> 1 ... Conectar com a chave acima geraria um backup do diretrio /var/cvs compactado e encriptado usando OpenPGP. Poderamos adicionar uma tarefa no cron para executar esse comando periodicamente: 1 [djm@roku ssh-tutorial]$ sudo crontab -lu root 0 0 * * * ssh -i .ssh/id_rsa_backup hachi > /var/backup/cvs-date 2 +%Y%m%d.tar.bz2.gpg

Encaminhamento SSH
O SSH possui a capacidade de multiplexar vrias conexes atravs de um canal SSH. Estes "encaminhamentos" permitem voc realizar conexes TCP/IP, X11 e sesses do ssh-agent por meio de uma sesso SSH.

Encaminhamento do agente de autenticao


O exemplo mais simples de encaminhamento o "encaminhamento de agente". Isto permite que uma conexo com o agente local (ssh-agent) seja encaminhada por uma conexo SSH e voc poder us-la na mquina remota. Por padro, esta opo fica desativada, pois pode levar a problemas de segurana se voc encaminhar seu agente (contendo suas chaves privadas) para uma mquina no confivel. Entre hosts confiveis, o encaminhamento de agente muito til. O encaminhamento de agente pode ser ativado pela linha de comandos: 1 ssh -A trustedhost Ou no arquivo de configuraes do cliente, especificando host por host: 1 [djm@roku ssh-tutorial]$ cat ~/.ssh/config 2 Host trustedhost 3 ForwardAgent yes Uma vez ativado, ser como ter um agente sendo executado na mquina remota: 1 [djm@roku ssh-tutorial]$ ssh -A hachi

2 Last login: Thu Aug 29 12:58:01 2002 from localhost.localdomain 3 [djm@argon djm]$ ssh-add -l 2048 40:a6:0a:59:e9:15:c0:d6:85:87:ec:63:5d:cc:06:ab 4 /home/djm/.ssh/id_rsa (RSA) 2048 39:9f:9c:47:a9:be:94:f6:1e:e6:a5:97:2d:b0:74:c3 5 /home/djm/.ssh-old/id_rsa (RSA)

Encaminhamento do X11 (ou rea de trabalho remota via SSH)

O SSH tambm permite encaminhar sesses do X11, o que permite a voc seguramente utilizar sesses X11 remotas como se fossem sesses locais. Novamente, esta opo desativada por padro por questes de segurana. Alm de ser ativada, tambm necessrio que o servidor e o cliente tenham um binrio do xauth disponvel e acessvel para configurar o sistema de autenticao MIT-MAGIC-COOKIE-1.

O encaminhamento do X11 pode ser ativo via linha de comando ou pelo arquivo de configuraes: 1 ssh -X hachi xclock Pelo arquivo de configuraes: 1 [djm@roku ssh-tutorial]$ cat ~/.ssh/config 2 Host trustedhost 3 ForwardX11 yes

Encaminhamento de portas (ou tunelamento)


Uma ferramentas mais flexveis do SSH o encaminhamento de portas, o qual permite o SSH a encaminhar sesses de TCP arbitrrias. E, uma vez que essas conexes vo estar rodando sobre um canal SSH, elas vo ser completamente encriptadas. Isto faz com que o encaminhamento de portas seja muito til para acrescentar segurana a protocolos tradicionalmente inseguros.

O SSH suporta encaminhamento de portas tanto do servidor para o cliente (localmente) quanto do cliente para o servidor (remotamente). O encaminhamento local permite que voc encaminhe uma porta na mquina local (cliente), atravs duma conexo SSH, para um host e porta do servidor que voc preferir. Ou seja, quando voc tentar conectar nessa porta de sua mquina, o SSH vai redirecion-la para o host e porta que voc especificou. Isso de maneira completamente invisvel tanto para voc quanto para qualquer aplicativo que acessar essa porta. Encaminhamento de portas local pode ser feito utilizando a opo L PortaLocal:HostRemoto:PortaRemota na linha de comando. Por exemplo, o comando a seguir vai fazer com que acessos a porta 8000 da mquina local sejam redirecionados para o host remoto 10.88.45.12 na porta 80: 1 ssh -L8000:10.88.45.12:80 somehost Tambm possvel inserir esse encaminhamento no arquivo de configuraes do cliente: 1 Host fw.somedomain.com.au 2 LocalForward 8000 somehost.int.somesomain.com.au:80 Isto ajuda muito a administrar mquinas que trabalham atrs de firewalls. Com o uso de encaminhamento de portas sobre uma conexo ao firewall, voc pode ganhar acesso s mquinas protegidas como se voc estivesse se conectando a partir do firewall. Outro truque muito til encaminhar uma porta para um servidor proxy para burlar um filtro web local. Quando utilizamos encaminhamento local de portas, o comportamento padro s permitir conexes da mquina local para as portas encaminhadas (feito por razes de segurana). Para permitir outros endereos de se conectarem as portas encaminhadas preciso especificar a opo GatewayPorts. Isto pode, como nos casos anteriores, ser especificado via linha de comando ogatewayports=yes ou no arquivo de configuraes do cliente. Alguns exemplos (retirados daqui): Acessando remotamente a administrao de impressoras do CUPS (porta 631): Vamos direcionar o trfego da porta local 5555 para a porta 631 do servidor 192.168.0.12, atravs de uma conexo SSH nesse mesmo servidor: 1 ssh -L 5555:192.168.0.12:631 192.168.0.12 Caso fosse necessrio utilizar um usurio especfico (por exemplo: joao), o comando ficaria assim: 1 ssh -L 5555:192.168.0.12:631 joao@192.168.0.12 Caso o servidor SSH estivesse em uma porta diferente da padro (22), digamos porta 2222,

faramos dessa maneira: 1 ssh -p 2222 -L 5555:192.168.0.12:631 joao@192.168.0.12 Caso voc deseje que as mquinas que se conectarem sua estao possam utilizar o tunel, o comando seria (supondo que o IP de sua estao seja 10.0.0.28): 1 ssh -p 2222 -L 10.0.0.28:5555:192.168.0.12:631 joao@192.168.0.12 Com a conexo estabelecia, bastaria abrir o navegador web e acessar o endereo http://localhost:631 (ou http://10.0.0.28:631 no caso de outras mquinas) para realizar o acesso. Agora, suponhamos que voc est com seu notebook em um CyberCafe, com conexo WiFi Open (sem criptografia) e deseja acessar os emails no servidor POP de sua empresa de forma segura. Para isso, voc precisaria ter acesso SSH a um dos equipamentos da empresa, como um firewall ou outro servidor. Supondo-se que que dados de conexo sejam: Firewall (com acesso SSH na porta 7788): 200.200.200.200 Servidor de Email (rodando POP na porta 110) : 172.16.100.50 Usurio para acesso SSH: antonio o comando seria: 1 ssh -p 7788 -L 110:172.16.100.50: antonio@200.200.200.200 Basta configurar seu cliente de email para acessar o servidor POP-3 no endereo 127.0.0.1, porta 110 e acessar suas mensagens de forma criptografada. Encaminhamento de portas remotas o oposto: conecta uma porta do servidor a uma porta no cliente. A sintaxe bem similar: -R remoteport:localhost:localport. O exemplo a seguir faz com que as conexes na porta 2500 da mquina remota sejam direcionadas para a porta 25 do host 10.34.54.12, que no caso se tratava do host local: 1 ssh -R 2500:10.34.54.12:25 somehost Isso til, quando voc precisa disponibilizar acesso da mquina remota a outra mquina, seja a sua mquina local ou qualquer outra. Pode ser por questes de segurana, burrocracia, constante troca de informaes importantes, etc. Basicamente, seria o mesmo que conectar no host remoto e criar um encaminhamento local l.

Encaminhamento dinmico de portas


O SSH tambm suporta um modo que permite encaminhamento de portas "dinmico". Nesta configurao, o SSH se comporta como um proxy SOCKS na porta especificada. Os clientes que se conectam a essa porta podem especificar um endereo e porta remotos ao qual querem conectar usando o protocolo SOCKS. Este modo til para fazer tneis atravs de firewalls (se voc tiver clientes que suportem SOCKS). Este modo definido passando a opo -D na linha de comando,e qual a porta que o seu ssh vai esperar por requisies SOCKS. Para fazer isso basta usar a opo -D: 1 ssh -D 9999 username@remotehost.net Qualquer aplicao que oferecer suporte ao protocolo SOCKS5 (e a maioria dos grandes programas de rede oferecem) pode encaminhar uma conexo via SSH e encaminh-la para qualquer host que

voc especificar. Por exemplo, para um navegador, qualquer URL que voc digitar ser enviada atravs do tnel. Firefox, Xchat, Gaim e muitos outros suportam o uso de SOCKS5. A configurao para isso fica geralmente em preferncias em configuraes de conexo. Lembre-se, como dizia Benjamin Parker ou "Tio Ben" , com grandes poderes vem grandes responsabilidades. No porqu voc pode burlar firewalls e usar outros hosts para movimentar seu trfego na rede que voc deva, nem que nenhum administrador no v notar a sua presena.

Mantendo sua sesso SSH ativa


De vez em quando voc pode ter problemas com manter sua sesso parada mas disponvel. Por qualquer razo, a conexo simplesmente fechada aps X minutos de inatividade. Geralmente, isto acontece porque h um firewall entre voc e a internet que est configurado para manter somente as conexes que no ficarem ociosas por 15 minutos ou algo nessa casa. Felizmente, nas verses mais recentes do OpenSSH, h uma soluo para esse problema. Simplesmente acrescente o cdigo a seguir: 1 2 3 4 Host * Protocol 2 TCPKeepAlive yes ServerAliveInterval 60

No seu arquivo de configuraes: 1 ~/.ssh/config Para mais detalhes sobre o arquivo de configuraes, veja a pgina man do ssh_config. A diretiva 'TCPKeepAlive yes' diz ao cliente que ele deve enviar um tiquinho de dados pela conexo periodicamente para que o servidor saiba que voc ainda est ali. 'ServerAliveInterval 60' define o perodo de tempo entre uma mensagem e outra para 60 segundos. Este truque engana muitos firewalls que de outra forma derrubariam a conexo, e voc pode ir no banheiro tranquilo e ler toda a sesso de quadrinho sem precisar conectar novamente a todas as mquinas em que voc estava conectado.

Finalizando a sesso SSH


Tudo que bom acaba um dia. E h vrias formas de finalizar sua sesso do SSH: 11 exit 21 logout 31 (Ctrl-d)

A ltima seria apertar as teclas "CTRL" + "D". Estas so maneiras de finalizar a sesso do SSH do lado do cliente. Geralmente elas finalizam o shell em que voc est e fazem logoff na mquina remota. Algo que talvez voc no saiba que h outra maneira de finalizar uma sesso SSH. Isto til caso voc perca conectividade com uma mquina e voc no tenha como terminar sua sesso. Por exemplo, isto acontece se voc permanecer logado em uma mquina enquanto ela est desligada. SSH tem suas prprias sequncias de escape na linha de comando. Isto pode ser usado para terminar conexes, criar novos tneis ou listar os atuais e algumas outras funes.Para terminar uma conexo mesmo quando voc no tem um terminal de comandos, pressione ENTER duas vezes (por precauo) e ento a sequncia '~.'. Um til e um ponto: 1 (ENTER) (ENTER) ~. Isto vai finalizar a conexo SSH pelo lado do cliente ao invs de finaliz-la pelo lado do servidor.

Implementaes do SSH
OpenSSH
OpenSSH implementao mais popular do SSH. OpenSSH suporta o protocolo SSH (v1 e v2) e distribudo sob uma licena BSD de cdigo fonte aberto. OpenSSH roda no *BSD, Linux, Solaris, Windows (via CygWin), HP/UX, Irix, Mac OS X, AIX, SCO, Tru64 e muitas outras plataformas. OpenSSH incluso com muitas distribuies gratuitas de sistemas operacionais (Linux, *BSD) assim como em vrias comerciais (incluindo Mac OS X e IBM AIX). Ele tambm a base da implementao do SSH do Solaris.

SSH Communications Corporation


SSH Communications Corporation foi fundada por Tatu Ylnen, (o criador do SSH). Eles fornecem implementaes comerciais dos protocolos SSH v1 e v2. Eles tambm oferecem verses no comerciais da verso 1 e uma verso mais restrita da verso 2. Os produtos deles so suportados no Windows, Linux e diversos tipos de Unix.

Unix
OSSH Uma implementao do protocolo SSH v1 feita por Bjrn Grnvall, baseado num cdigo antigo do Tatu Ylnen o qual foi lanado sob a licena de cdigo aberto. OSSH formou as bases das primeiras verses do OpenSSH. FreSSH Uma implementao gratuita do protocolo SSH v1 feita por Eric Haszlakiewicz, Thor Lancelot Simon e Jason R. Thorpe. LSH/Psst Uma implementao GPL do protocolo SSH v2 feita por Niels Mller. LSH interessante por seu suporte ao SPKI.

Windows
PuTTY Uma implementao de tima qualidade do telnet e dos protocolos SSH v1 e v2 feito por Simon

Tatham. Ele tambm inclui um ssh-agent (pagent) assim como suporte a scp e sftp. TTSSH A free plugin providing SSH protocol v.1 capability for Tera Term Pro, a free terminal emulator. Written by Robert OCallahan.

Macintosh
NiftyTelnet SSH Uma verso melhorada do NiftyTelnet, o qual suporta o protocolo SSH v1. MacSSH Uma implementao gratuita do protocolo SSH v2 baseada no BetterTelnet e no LSH.

Other
Top Gun SSH Uma implementao do protocolo SSH v1 para palmtops com PalmOS. Ele requer o PilotSSLeay. MindTerm Mindterm uma implementao aberto em Java dos protocolos SSH. Mindterm 1 implementa SSH v1 e cdigo fonte aberto. As verses mais recentes suportam o protocolo v2 mas so comerciais. Java-SSH Um cliente para o protocolo SSH v1 com uma licena confusa. SSH Plugin Outro cliente SSH v1 em java. Licena open-source (GPL).

Você também pode gostar