É essencial para um(a) administrador(a) ser capaz de se conectar a um computador remotamente. Servidores, confinados em sua própria sala, raramente são equipados com teclados e monitores permanentes — mas estão conectados à rede.
9.2.1. Login remoto seguro: SSH
O protocolo SSH (Secure SHell) foi projetado com segurança e confiabilidade em mente. Conexões usando SSH estão seguras: o parceiro é autenticado e todas as trocas de dados criptografadas.
SSH também oferece dois serviços de transferência de arquivo. scp
é uma ferramenta de linha de comando que pode ser usada como cp
, exceto que qualquer caminho a outra máquina é prefixado com o nome da máquina, seguido por dois-pontos.
$
scp arquivo máquina:/tmp/
sftp
é um comando interativo, semelhante ao ftp
. Em uma única sessão, o sftp
pode transferir vários arquivos, e com ele é possível manipular arquivos remotos (apagar, renomear, alterar permissões, etc.).
O Debian usa o OpenSSH, uma versão livre do SSH mantido pelo projeto OpenBSD
(um sistema operacional livre baseado no núcleo BSD, focado em segurança) e uma bifurcação do programa original SSH desenvolvido pela empresa SSH Communications Security Corp, da Finlândia. Esta empresa desenvolveu inicialmente o SSH como software livre, mas num dado momento decidiu continuar o seu desenvolvimento sob uma licença proprietária. O projeto OpenBSD criou então o OpenSSH para manter uma versão gratuita do SSH.
O OpenSSH é dividido em dois pacotes. A parte do cliente está no pacote openssh-client, e o servidor está no pacote openssh-server. O meta-pacote ssh depende de ambas as partes e facilita a instalação de ambos (apt install ssh
), enquanto o pacote task-ssh-server, executado com frequência durante a instalação inicial, depende apenas do pacote servidor.
9.2.1.1. Autenticação Baseada em Chave
Cada vez que alguém se conecta por SSH, o servidor remoto pede uma senha para autenticar o(a) usuário(a). Isso pode ser problemático se você quiser automatizar uma conexão ou se você usar uma ferramenta que requer conexões frequentes com o SSH. Por esse motivo, o SSH oferece um sistema de autenticação baseado em chave.
O(a) usuário(a) gera um par de chaves na máquina cliente com ssh-keygen -t rsa
; a chave pública assim gerada é armazenada em ~/.ssh/id_rsa.pub
, enquanto a chave privada correspondente é armazenada em ~/.ssh/id_rsa
. O(a) usuário(a) pode então usar ssh-copy-id servidor
para adicionar sua chave pública ao arquivo ~/.ssh/authorized_keys
no servidor, ou, se o acesso SSH ainda não tiver sido ativado, devem solicitar ao(à) administrador(a) que adicione sua chave manualmente.
Se a chave privada não estava protegida por uma "frase-senha" no momento de sua criação, todos os logins subsequentes no servidor vão funcionar sem uma senha. Caso contrário, a chave privada deve ser descriptografada a cada momento digitando-se a senha. Felizmente, ssh-agent
nos permite manter as chaves privadas na memória para não ter que digitar novamente com frequência a senha. Para isso, basta usar ssh-add
(uma vez por sessão de trabalho), desde que a sessão já esteja associada a uma instância funcional do ssh-agent
. O Debian ativa por padrão nas sessões gráficas, mas isso pode ser desativado alterando /etc/X11/Xsession.options
e comentando use-ssh-agent
. Para uma sessão de console, você pode iniciar o agente manualmente com eval $(ssh-agent)
.
9.2.1.2. Autenticação Baseada em Certificado
As chaves SSH não podem ser protegidas apenas por uma senha (ou não). Um recurso frequentemente desconhecido é que elas também podem ser assinadas por meio de certificado, tanto as chaves do host quanto as do cliente. Essa abordagem tem várias vantagens. Em vez de manter um arquivo
authorized_keys
por usuário(a), conforme descrito na seção anterior, o servidor SSH pode ser configurado para confiar em todas as chaves do cliente assinadas pelo mesmo certificado (consulte também
Seção 10.2.2, “Infraestrutura de Chaves Públicas: easy-rsa”) usando as diretivas
TrustedUserCAKeys
e
HostCertificate
em
/etc/ssh/sshd_config
.
TrustedUserCAKeys /etc/ssh/ssh_users_ca.pub
HostKey /etc/ssh/ssh_host_ecdsa_key
HostCertificate /etc/ssh/ssh_host_ecdsa_key-cert.pub
Vice-versa, os clientes também podem ser configurados para confiar na chave do hospedeiro assinada pela mesma autoridade, facilitando a manutenção do arquivo known_hosts
(mesmo no nível de sistema via /etc/ssh/known_hosts
).
@cert-authority *.falcot.com ssh-rsa AAAA[..]
Ambas, chave pública e autenticação de certificado, podem ser usadas lado a lado.
9.2.1.3. Usando aplicações X11 remotamente
O protocolo SSH permite o encaminhamento de dados gráficos (sessão “X11”, a partir do nome do sistema gráfico mais difundido no Unix); o servidor então mantém um canal dedicado para esses dados. Especificamente, um programa gráfico executado remotamente pode ser exibido no servidor X.org da tela local, e toda a sessão (entrada e exibição) será segura. Como essa funcionalidade permite que aplicações remotas interfiram com o sistema local, ela é desabilitada por padrão. Você pode habilitá-la especificando X11Forwarding yes
no arquivo de configuração do servidor (/etc/ssh/sshd_config
). Finalmente, o(a) usuário(a) também tem que requisitá-la adicionando a opção -X
na linha de comando do ssh
.
9.2.1.4. Criando túneis criptografados com encaminhamento de porta
As opções
-R
e
-L
permitem ao
ssh
criar “túneis criptografados” entre duas máquinas, encaminhando com segurança uma porta TCP local (veja barra lateral
DE VOLTA AO BÁSICO TCP/UDP) para uma máquina remota ou vice versa.
ssh -L 8000:server:25 intermediary
estabelece uma sessão SSH com a máquina
intermediary e escuta pela porta local 8000 (veja
Figura 9.3, “Encaminhando uma porta local com SSH”). Para qualquer conexão estabelecida por esta porta,
ssh
irá iniciar uma conexão a partir do computador
intermediary na porta 25 no
server, e irá ligar as duas conexões.
ssh -R 8000:server:25 intermediary
também estabelece uma sessão SSH com o computador
intermediary, mas é nessa máquina que o
ssh
ouve na porta 8000 (veja
Figura 9.4, “Encaminhando uma porta remota com SSH”). Qualquer conexão estabelecida nesta porta fará com que o
ssh
abra uma conexão a partir da máquina local na porta 25 do
server, e faça a ligação das duas conexões.
Nos dois casos, as conexões são feitas pela porta 25 na máquina servidora, que passa pelo túnel SSH estabelecido entre a máquina local e a máquina intermediária. No primeiro caso, a entrada do túnel é a porta local 8000, e os dados se movem em direção à máquina intermediária antes de ser direcionada à servidora na rede “pública”. No segundo caso, a entrada e a saída do túnel são invertidas; a entrada é a porta 8000 na máquina intermediária, a saída é na máquina local, e os dados são então direcionados para a servidora. Na prática, a servidora é usualmente a máquina local ou a intermediária. Dessa forma o SSH mantém segura a conexão de uma ponta a outra.
9.2.2. Usando ambientes gráficos remotamente
O VNC (Virtual Network Computing - Computação de Rede Virtual) permite o acesso remoto a áreas de trabalho (desktops) gráficas.
Essa ferramenta é, na maioria das vezes, usada para assistência técnica; o(a) administrador(a) pode ver os erros com os quais o(a) usuário(a) está enfrentando, e mostrar-lhes um curso de ação correto, sem estar fisicamente presente.
Primeiro, o(a) usuário(a) tem que autorizar o compartilhamento de sua sessão. O ambiente gráfico GNOME inclui essa opção via → (ao contrário de versões anteriores do Debian, onde o(a) usuário(a) tem quem instalar e executar vino
). Para que isso funcione, network-manager deve estar gerenciando a rede usada (por exemplo, disponibilizar o modo managed
para dispositivos geridos por ifupdown em /etc/NetworkManager/NetworkManager.conf
). O KDE Plasma ainda necessita usar o krfb
para permitir o compartilhamento de uma sessão existente através do VNC. Para outros ambientes gráficos, os comandos x11vnc
ou tightvncserver
(dos pacotes Debian de mesmos nomes) ou tigervncserver
(tigervnc-standalone-server) servem ao mesmo propósito e fornecem o pacote virtual vnc-server; você pode tornar qualquer um deles disponível para o(a) usuário(a) com uma entrada explícita de menu ou de área de trabalho.
Quando a sessão gráfica se torna disponível através do VNC, o(a) administrador(a) tem que fazer a conexão a ele com o cliente VNC. O GNOME tem os comandos vinagre
e remmina
para isso, enquanto o projeto KDE provê o comando krdc
(no menu em → → ). Existem outros clientes VNC que usam a linha de comando, como o xtightvncviewer
do pacote de mesmo nome ou xtigervncviewer
do pacote Debian tigervnc-viewer. Uma vez conectado(a), o(a) administrador(a) pode ver o que está acontecendo, trabalhar na máquina remotamente, e orientar o(a) usuário(a) sobre como proceder.