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
espec:servico_ssh_scp [2012/05/18 17:13] mazieroespec:servico_ssh_scp [2020/08/18 19:09] (atual) – edição externa 127.0.0.1
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''.
  
  • espec/servico_ssh_scp.txt
  • Última modificação: 2020/08/18 19:09
  • por 127.0.0.1