Ferramentas do usuário

Ferramentas do site


espec:servico_ssh_scp

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
espec:servico_ssh_scp [2012/03/06 08:56]
maziero
espec:servico_ssh_scp [2012/05/18 17:13] (atual)
maziero
Linha 1: Linha 1:
 +====== SSH: Secure Shell ======
 +
 +A possibilidade de conexão por terminal remoto é essencial para a administração de sistemas. O comando ​ ''​telnet''​ permite estabelecer conexões de terminal texto com hosts UNIX. Dentro de uma sessão ''​telnet'',​ todos os comandos são executados na máquina-alvo,​ mas as interações com o usuário são apresentadas localmente, na máquina onde o usuário se encontra.
 +
 +O serviço ''​telnet''​ é considerado inseguro, sobretudo em redes públicas. Isso porque as informações de uma ''​telnet''​ circulam pela rede de forma aberta, sem criptografia. Algum usuário que esteja "​ouvindo"​ a rede pode capturar pacotes com logins, senhas, etc, compromentendo a segurança do sistema. Por isso, recomenda-se o uso de alternativas criptografadas para efetuar conexões de terminais remotos. Uma boa alternativa ao ''​telnet''​ é o serviço //Secure Shell// (SSH). ​
 +
 +O serviço SSH - Secure Shell (porta 22/TCP) substitui o telnet com diversas vantagens, sendo a principal o fato de criar um "​túnel"​ criptografado para o tráfego das informações da sessão de trabalho. O SSH faz uso do serviço SSL - //Secure Sockets Layer//, uma camada de software que cria a noção de sessão de trabalho segura sobre sockets TCP convencionais.
 +
 +====== SCP: Secure Copy ======
 +
 +Além de substituir o telnet em terminais de modo texto, o SSH também substitui o serviço FTP autenticado,​ provendo uma forma segura de transferência de arquivos entre computadores. Isso é feito através dos serviços SCP e SFTP:
 +
 +  * SCP é mais usado em servidores SSH versão 1 (SSH1). Permite a transferência cifrada de arquivos em ambas as direções (//​upload//,​ //​download//​).
 +  * SFTP é mais usado em servidores SSH2. Ao contrário do SCP, implementa um sistema de arquivo remoto, permitindo mais operações sobre os arquivos remotos, como mover, copiar, renomear, etc.
 +
 +====== Tunelamento ======
 +
 +Outra característica interessante do protocolo SSH é a capacidade de "​tunelar"​ outros protocolos. Ao criar um túnel, o servidor e o cliente SSH permitem transportar pacotes de outros protocolos através do canal SSH. Essa característica é útil para proteger protocolos não-criptografados (como POP3 e VNC), fazendo-os passar por dentro do túnel cifrado. Outro uso freqüente é "​burlar"​ //​firewalls//,​ passando através do túnel os protocolos que seriam filtrados pelo //​firewall//​. Veja exemplos de tunelamento das portas 5900 (VNC) e 110 (POP3):
 +
 +{{ :​espec:​ssh-tunel.png |}}
 +
 +Na figura acima estão presentes dois tipos de túneis:
 +
 +  * **túnel privado**: quando somente processos da máquina cliente podem fazer uso do túnel (túnel VNC em azul na figura)
 +  * **túnel público**: quando processos clientes em outros hosts podem usar o túnel (túnel POP em vermelho na figura)
 +
 +====== Autenticação por chaves ======
 +
 +Normalmente,​ as sessões SSH/SCP são autenticadas por senha: ao se conectar, o usuário informa seu nome de login e sua senha; caso os dados sejam válidos, a sessão é iniciada. Todavia, outras formas de autenticação também podem ser usadas, como chaves criptográficas,​ NIS, Kerberos, etc. Esses métodos evitam que o usuário tenha de se autenticar a cada conexão, e também são úteis no caso de conexões ativadas por programas ou scripts, sem intervenção do usuário.
 +
 +O uso de autenticação por chaves criptográficas é particulamente interessante,​ por ser um método simples de configurar e relativamente robusto. Esse método é baseado em um par de chaves criptográficas assimétricas,​ ou seja, uma chave pública e sua correspondente privada. Para gerar esse par de chaves, pode ser usado o comando ''​ssh-keygen''​ no computador cliente (as solicitações do programa podem ser respondidas com ''<​enter>''​):​
 +
 +<​code>​
 +client:​~>​ ssh-keygen -t rsa
 +Generating public/​private rsa key pair.
 +Enter file in which to save the key (/​home/​myuser/​.ssh/​id_rsa): ​
 +Enter passphrase (empty for no passphrase): ​
 +Enter same passphrase again: ​
 +Your identification has been saved in /​home/​myuser/​.ssh/​id_rsa.
 +Your public key has been saved in /​home/​myuser/​.ssh/​id_rsa.pub.
 +The key fingerprint is:
 +11:​1d:​9e:​b0:​68:​1d:​2d:​3a:​0a:​41:​be:​51:​db:​67:​1f:​05 myuser@client
 +</​code>​
 +
 +Esse comando gerará dois arquivos no diretório ''​$HOME/​.ssh'':​
 +
 +<​code>​
 +client:​~>​ ls -l .ssh/
 +total 2
 +-rw------- 1 myuser mygroup 1675 2006-07-08 10:26 id_rsa
 +-rw-r--r-- 1 myuser mygroup ​ 411 2006-07-08 10:26 id_rsa.pub
 +</​code>​
 +
 +  * O arquivo ''​id_rsa''​ contém uma chave privada, que só deve estar acessível ao seu dono;
 +  * O arquivo ''​id_rsa.pub''​ contém a chave pública correspondente,​ que será distribuída.
 +
 +Uma vez gerado o par de chaves criptográficas,​ a chave pública (o arquivo ''​$HOME/​.ssh/​id_rsa.pub''​) deve ser transferida para todas as contas (os servidores SSH remotos) onde se deseja efetuar a autenticação por chaves. Em cada conta, a chave pública deve ser copiada no final do arquivo ''​$HOME/​.ssh/​authorized_keys''​. Se esse arquivo não existir, ele deve ser criado, com permissões 0644 (''​rw-r--r--''​).
 +
 +<​code>​
 +server:​~>​ cat id_rsa.pub >> $HOME/​.ssh/​authorized_keys
 +server:​~>​ chmod 0644 $HOME/​.ssh/​authorized_keys
 +</​code>​
 +
 +A cópia da chave pública para o servidor remoto também pode ser feita através do comando ''​ssh-copy-id'',​ que automatiza o procedimento acima (basta substituir ''​myuser''​ pela sua identificação no servidor):
 +
 +<​code>​
 +client:​~>​ ssh-copy-id myuser@server
 +</​code>​
 +
 +A mesma chave pública (arquivo ''​id_rsa.pub''​) pode ser copiada para todos os servidores/​contas nos quais se deseja efetuar autenticação por chaves. Se tudo tiver sido feito corretamente,​ já deve ser possível efetuar conexões SSH com autenticação por chaves, sem a necessidade de senhas. Isso pode ser facilmente testado a partir da máquina cliente:
 +
 +<​code>​
 +client:​~>​ ssh myuser@server
 +Last login: Fri Jul 18 10:10:02 2008 from 189.34.123.54
 +
 +server:​~>​
 +</​code>​
 +
 +A autenticação por chaves torna muito simples e prática a execução de comandos remotos em scripts, por dispensar a digitação das senhas. Por exemplo, para verificar os usuários conectados ao //host// ''​dainf.ct.utfpr.edu.br''​ (comando ''​w''​),​ basta digitar:
 +
 +<​code>​
 +client:​~>​ ssh dainf.ct.utfpr.edu.br w
 + ​17:​10:​47 up 23 days, 22:​42, ​ 1 user,  load average: 0,00, 0,00, 0,00
 +USER     ​TTY ​     FROM              LOGIN@ ​  ​IDLE ​  ​JCPU ​  PCPU WHAT
 +root     ​tty1 ​                     24Apr12 23days ​ 0.43s  0.27s -bash
 +maziero ​ pts/0    200.134.10.56 ​   17:13    5.00s  0.16s  0.16s -bash
 +client:​~> ​
 +</​code> ​
 +
 +Caso a autenticação por chaves não funcione, deve-se verificar a configuração do **servidor SSH** (arquivo ''/​etc/​ssh/​sshd_config''​),​ mais especificamente as opções ''​RSAAuthentication'',​ ''​PubkeyAuthentication''​ e ''​AuthorizedKeysFile''​.