O documento discute o uso de terminais remotos seguros através do SSH, descrevendo como o SSH fornece acesso remoto seguro através da autenticação forte e criptografia de sessão com chaves públicas, substituindo protocolos não seguros como o Telnet. O documento também resume as configurações e comandos principais do SSH.
1. 1 Terminal Remoto e Shell Seguro Luiz Arthur
O uso de terminais e login remotos sempre existiram para a gerência de
computadores remotos, entretanto no início estes terminais de logins remotos
não possuam segurança pois os dados eram transmitidos pela rede em forma de
texto puro, ou seja, todos os dados (incluindo senha) quando capturados pela
rede podiam ser lidos sem maiores problemas.
O servidor de Shell Seguro (SSH) proporciona acesso remoto com autenticação
forte e sessão de encriptação com chave pública. O shell seguro é seguro e fácil
de usar. O SSH substitui o telnet, FTP, rlogin e rsh como alternativa segura. Toda
a comunicação entre cliente/servidor é feita de forma encriptada usando chaves
públicas/privadas RSA ou DSA para criptografia garantindo uma transferência
segura de dados.
O ssh é então um programa de login remoto (acesso ao sistema) para a execução
de comandos em uma máquina remota. O ssh substitui programas de login
remotos já consagrados como o telnet, rlogin, etc, os quais não proviam nenhuma
segurança (os dados eram transmitidos no formato texto puro) na transferência
de dados. O ssh também permite que conexões de servidores gráficos remotos
seja feita por um canal seguro.
A segurança do ssh é fornecida devido ao fato dos dados serem criptografados
antes de serem transmitidos, isto é possível através do uso de chaves
criptograficas publicas trocadas entre os hosts no inicio da transmissão dos
dados.
2. 2
Terminal Remoto e Shell Seguro Luiz Arthur
O servidor ssh chamado de sshd é um serviço que “escuta” conecções dos
clientes. O sshd prove autenticação, execução de comandos remotamente, além
de troca de dados entre os hosts remotos (estilo FTP).
O ssh de forma geral é constituído dos seguintes programas:
● openssh – Contém o utilitário de geração de chaves criptograficas, conhecido
como ssh-keygen e o programa de cópia de arquivo remoto chamado de scp.
● openssh-server – Contém o daemon do servidor sshd e do servidor ftp seguro.
● Openssh-clients – Contém as ferramentas de ciente OpenSSH para
manutenção de chave de cliente, bem como o comando ssh para login seguro
e o comando sftp para FTP seguro.
Quando um servidor e cliente ssh se conectam, eles trocam chaves criptograficas.
As chaves são comparadas às chaves conhecidas (trocadas em uma sessão
anterior, por exemplo). Se as chaves não forem encontradas, ao usuário é
perguntado se uma chave nova deve ser aceita. Se a chave for aceita pelo usuário
a chave do host é adicionada ao arquivo ~/.ssh/known_hosts no diretório home do
usuário, e então é usada para codificar uma chave de sessão gerada
aleatoriamente. A chave de sessão é então usada por ambos os sistemas para
codificar o resto da sessão.
3. 3 Terminal Remoto e Shell Seguro Luiz Arthur
Se nenhuma autenticação especial foi configurada, é solicitado ao usuário um usuário e
uma senha; utilizando o ssh para uma conexão entre os hosts, assim o roubo de senha
torna-se praticamente impossível, por que a senha é codificada antes de ser enviada.
A velocidade do console remoto conectado via Internet é excelente (melhor que a obtida
pelo telnet e serviços r*) dando a impressão de uma conexão em tempo real, a compactação
dos dados também pode ser ativada para elevar ainda mais a velocidade entre cliente-
servidor ssh.
Configurando o sshd
Pouca configuração é exigida para executar um servidor SSH, mas é possível muita
configuração.
Muitos dos servidores em Linux tem a característica de não necessitarem de muita
configuração apesar de possuírem inúmeras variáveis que podem ser configuradas
conforme a necessidade. O SSH não é nenhuma exceção, sem configuração, o SSH
funcionará muito bem, mas há opções de configuração que você pode usar para modificá-lo
para seu uso particular.
O sshd é configurado pelo arquivo texto /etc/ssh/sshd_config. As principais
opções/parâmetros de configuração neste arquivo são:
AllowGroups – Lista os grupos dos quais são permitidos logins. Um usuário tem que
pertencer a um dos grupos listados para se registrar ao sistema. Por padrão, logins não são
limitados a grupos específicos.
4. 4
Terminal Remoto e Shell Seguro Luiz Arthur
AllowTcpForwarding – Especifica se o encaminhamento (roteamento) é permitido
ou não. Por padrão, é permitido (yes);
AllowUsers – Lista os usuários que são permitidos para o login. Por padrão,
logins não são limitados a usuários específicos. Os usuários são separados por
espaços;
Banner – Identifica um arquivo que contém uma página de banner (uma
mensagem) que é exibida antes do login;
ChallengeResponseAuthentication – Especifica se a autenticação de
desafio/resposta deve ser usada ou não. O default é yes.
Ciphers – Identifica as técnicas de criptografia que serão suportadas pelo
servidor. Os ciphers suportados são: ``3des-cbc'', ``aes128-cbc'', ``aes192-cbc'',
``aes256-cbc'', ``aes128-ctr'', ``aes192-ctr'', ``aes256-ctr'', ``arcfour'',
``blowfish-cbc'', and ``cast128-cbc''. O padrão é ``aes128-cbc,3des-cbc,blowfish-
cbc,cast128-cbc,arcfour, aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-
ctr''
CheckMail – Especifica se o sshd deve verificar se o usuário que efetuou a
conecção tem ou não mensagem de email. O padrão é não verificar.
5. 5
Terminal Remoto e Shell Seguro Luiz Arthur
ClientAliveInterval – Define o intervalo de tempo no qual serão enviadas
mensagens ao cliente quando o link estiver inativo. Estas mensagens são um meio
de concluir uma resposta do cliente. O padrão é 0, significando que o servidor
não enviará as mensagens.
ClientAliveCountMax – Define o número máximo de mensagem que serão
enviadas a um cliente inativo, antes da conexão ser terminada pelo servidor. O
padrão é 3.
DenyGroups – Lista os grupos que não estão autorizados a se registrar no
servidor. Usuários que pertencem a quaisquer deste grupos não serão
autorizados a se registrar. Por padrão todos os grupos estão autorizados.
DenyUsers – Lista os usuários que não estão autorizados a se registrar no
servidor. Por padrão todos estão autorizados.
HostbasedAuthentication – Especifica se .rhosts e /etc/hosts.equiv serão usados
ou não para autenticação de clientes. O padrão é não.
HostKey – Identifica o arquivo que contém os chaves privadas do host. O padrão é
/etc/ssh/ssh_host_key.
IgnoreRhosts – Significa que os arquivos .rhosts e .shosts não serão usados,
mesmo se RhostsAuthenticatio, RhostsRSAAuthentication ou
HostbasedAuthenticaion forem especificados.
6. 6
Terminal Remoto e Shell Seguro Luiz Arthur
IgnoreUserKnownHosts – Faz com que o servidor ignore o ~/.ssh/know_hosts do
usuário durante a autenticação de RhostsRSAAuthentication e
HostbasedAuthentication. O padrão é usar o arquivo ~/.ssh/know_hosts.
KeepAlive – Especifica se o sistema deve enviar ou não mensagens keepalive para
descobrir se o link está operacional. O padrão é yes.
ListenAddress – Identivica o endereço e porta na qual o sshd deve escutar por
conexões. O padrão é escutar todos os endereços atribuídos ao servidor e escutar
a porta padrão (normalmente a 22).
LoginGraceTime – Define a quantidade de tempo que o servidor esperará pelo
usuário para completar um login bem-sucedido. O padrão é 600 segundos.
LogLevel – Especifica o nível de detalhe gravado no registro de logs.
MaxStartups – Define o número máximo de conexões que podem estar esperando
por autenticação. O padrão é 10.
PasswordAuthenticationPassword – Informa ao sshd se a autenticação por senha
é permitida ou não, o padrão é sim.
7. 7
Terminal Remoto e Shell Seguro Luiz Arthur
PermitEmptyPasswords – Informa ao sshd se uma senha é requerida ou não para
autenticação por senha.
PermitRootLogin – Define o nível de acesso concedido ao usuário root. São quatro
nível: yes (Ao usuário root é concedido acesso de login completo por ssh), no (o
usuário root não pode acessar o sshd diretamente), without-password (o usuário
root é autorizado acessar o sistema, mas não pode usar senhas para fazer isto),
forced-commands-only (o root é autorizado a executar comandos remotamente se
o usuário foi autenticado por autenticação de chave publica.
PidFile – Define o caminho no qual o sshd grava seu IP de processo. O padrão é
/var/run/sshd.pid.
Port – Define a porta na qual o sshd executa por tráfego entrante. O padrão é a
porta 22.
Protocol – Lista as versões do protocolo SSH que o servidor deve suportar. O
padrão é tentar primeiro a versão 2 e então recuar para a versão 1 (então a
opção é 2,1). A versão 1 tem alguns problemas de segurança bem conhecidos, se
possível desabilite-o.
RhostsAuthentication – Informa ao sshd para usar o .rhosts ou /etc/hosts.equiv
para a autenticação sem senha. O padrão é não.
8. 8
Terminal Remoto e Shell Seguro Luiz Arthur
RhostsRSAAuthentication – Informa ao sshd que pode usar arquivos de hosts
confiaveis junto com a chave RSA. O padrão é não utilizar.
RSAAuthentication – Define a autenticação de chave pública RSA é permitida ou
não, o padrão é permitir.
ServerKeyBits – Define o número de bits usada para criptografar a sessão ssh
versão 1. O valor mínimo é 512 e o padrão é 768 bits.
UserLogin – Especifica se o Login é usado ou não para sessões de login
interativas. O padrão é não.
X11DisplayOffset – Define o mais baixo número de exibição que sshd está
autorizado a usar para encaminhar X11. O padrão é 10.
X11Forward – Informa ao ssh se deve ou não encaminhar tráfego X11 ao cliente,
o padrão é não
A maioria das opção não são necessárias.
Observe o arquivo de configuração com o comando a seguir:
# less /etc/ssh/sshd_config
9. 9
Terminal Remoto e Shell Seguro Luiz Arthur
O sshd não funciona por padrão no slackware como um processo do inetd. Então
o sshd é um processo independente.
Desta forma, após configurar o arquivo do servidor sshd basta iniciar o script de
inicialização do sshd, com o seguinte comando:
#/etc/rc.d/rc.sshd restart
Para verificar se o servidor esta funcionando corretamente basta executar o
netstat e verificar se o serviço sshd esta em execução, para isto execute o
comando:
# netstat -a --tcp | grep sshd
Se tudo correu bem você pode usar o seguinte comando para acessar o servidor
ssh:
#ssh ip_do_servidor_ssh
Talvez seja necessário nos comandos incluir o nome do usuário que vai acessar o
servidor ssh, assim os comandos ssh ficariam como a seguir:
#ssh usuario@ip_do_servidor_ssh
10. 10
Terminal Remoto e Shell Seguro Luiz Arthur
Aplicativos clientes para o uso de servidores SSH
Comando ssh
O comando ssh é a ferramenta usada acessar seções de console remotos. O
arquivo de configuração de usuários é ~/.ssh/config e o arquivo global
/etc/ssh/ssh_config. Para conectar a um servidor ssh remoto:
$ ssh usuario@ip/nome_do_servidor_ssh
Caso o nome do usuário seja omitido, seu login atual do sistema será usado. Com
a opção -l é usada também para alterar a identificação de usuário.
O uso da opção -C é recomendado para ativar o modo de compactação dos dados
(útil em conexões lentas).
Uma porta alternativa pode ser especificada usando a opção -p porta (a 22 é
usada por padrão).
Na primeira conexão, a chave pública do servidor remoto será gravada em
~/.ssh/know_hosts, e verificada a cada conexão como checagem de segurança
para se certificar que o servidor não foi alvo de qualquer ataque ou modificação
não autorizada das chaves.
11. 11
Terminal Remoto e Shell Seguro Luiz Arthur
Exemplos:
Conecta-se ao servidor remoto usando o login do usuário atual
$ ssh ftp.sshserver.org
Conecta-se ao servidor remoto usando o login john (via ssh versão 2)
$ ssh -2 ftp.sshserver.org -l john
Conecta-se ao servidor remoto usando compactação e o login john
$ ssh ftp.sshserver.org -C -l john
Semelhante ao exemplo acima, usando o formato "login@ip"
$ ssh john@ftp.sshserver.org -C
12. 12
Terminal Remoto e Shell Seguro Luiz Arthur
Comando scp
Permite a cópia de arquivos entre o cliente/servidor ssh.
A sintaxe usada por este comando é a seguinte:
$ scp [origem] [destino]
Os parâmetros de origem e destino são semelhantes ao do comando cp mas
possui um formato especial quando é especificado uma máquina remota:
● Um caminho padrão - Quando for especificado um arquivo local. Por exemplo:
/usr/src/arquivo.tar.gz.
● usuario@host_remoto: /diretório/arquivo - Quando desejar copiar o
arquivo de/para um servidor remoto usando sua conta de usuário. Por
exemplo: gleydson@ftp.server.org:~/arqs.
A opção -C é recomendável para aumentar a taxa de transferência de dados
usando compactação. Caso a porta remota do servidor sshd seja diferente de 22,
a opção -P porta deverá ser especificada (é "P" maiúscula mesmo, pois a -p é
usada para preservar permissões/data/horas dos arquivos transferidos).
13. 13
Terminal Remoto e Shell Seguro Luiz Arthur
Exemplos:
Para copiar um arquivo local chamado /pub/teste/script.sh para meu
diretório pessoal em ftp.sshserver.org.
$ scp -C /pub/teste/script.sh gleydson@ftp.sshserver.org:~/
Para fazer a operação inversa a acima (copiando do servidor remoto para o local)
é só inverter os parâmetros origem/destino:
$ scp -C gleydson@ftp.sshserver.org:~/script.sh /pub/teste
Para copiar o arquivo local chamado /pub/teste/script.sh para o diretório
/scripts dentro do meu diretório pessoal em ftp.sshserver.org com o nome
teste.sh.
$ scp -C /pub/teste/script.sh gleydson@ftp.sshserver.org:~/scripts/teste.sh
O exemplo abaixo faz a transferência de arquivos entre 2 computadores remotos:
O arquivo teste.sh é lido do servidor server1.ssh.org e copiado para
server2.ssh.org (ambos usando o login gleydson)
$ scp -C gleydson@server1.ssh.org:~/teste.sh gleydson@server2.ssh.org:~/
14. 14
Terminal Remoto e Shell Seguro Luiz Arthur
Comando sftp
Permite realizar transferência de arquivos seguras através do protocolo ssh. A
conexão e transferências são realizadas através da porta 22 (ainda não é possível
modificar a porta padrão).
A sintaxe para uso deste comando é a seguinte:
sftp usuario@host_remoto
Compactação pode ser especificada através da opção -C. Um arquivo contendo os
comandos usados na seção sftp poderá se especificado através da opção -b
arquivo para automatizar tarefas.
O suporte ao programa sftp somente está disponível ao protocolo ssh versão 2 e
superiores.
15. 15
Terminal Remoto e Shell Seguro Luiz Arthur
fim
16. 16
Terminal Remoto e Shell Seguro Luiz Arthur
fim