É essencial para o administrador ser capaz de se conectar a um computador remotamente. Servidores, confinados em seu quarto, raramente são equipados com permanentes teclados e monitores — mas eles 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 kernel 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.
OpenSSH is split into two packages: the client part is in the openssh-client package, and the server is in the openssh-server package. The ssh meta-package depends on both parts and facilitates installation of both (apt install ssh
), while the task-ssh-server, often chosen during the initial installation, depends on the server package only.
9.2.1.1. Autenticação Baseado em Chave
Cada vez que alguém se conecta por SSH, o servidor remoto pede uma senha para autenticar o usuário. Isto 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 este motivo, o SSH oferece um sistema de autenticação baseado em chave.
The user generates a key pair on the client machine with ssh-keygen -t rsa
; the so generated public key is stored in ~/.ssh/id_rsa.pub
, while the corresponding private key is stored in ~/.ssh/id_rsa
. The user can then use ssh-copy-id server
to add their public key to the ~/.ssh/authorized_keys
file on the server, or, if SSH access hasn't been enabled yet, they have to ask the administrator to add their key manually.
If the private key was not protected with a “passphrase” at the time of its creation, all subsequent logins on the server will work without a password. Otherwise, the private key must be decrypted each time by entering the passphrase. Fortunately, ssh-agent
allows us to keep private keys in memory to not have to regularly re-enter the password. For this, you simply use ssh-add
(once per work session) provided that the session is already associated with a functional instance of ssh-agent
. Debian activates it by default in graphical sessions, but this can be deactivated by changing /etc/X11/Xsession.options
and commenting out use-ssh-agent
. For a console session, you can manually start the agent with eval $(ssh-agent)
.
9.2.1.2. Cert-Based Authentication
SSH keys cannot just be protected by a password (or not). An often unknown feature is that they can also be signed via certificate, both the host as well as the client keys. This approach comes with several advantages. Instead of maintaining an
authorized_keys
file per user as described in the previous section, the SSH server can be configured to trust all client keys signed by the same certificate (see also
Seção 10.2.2, “Infraestrutura de Chaves Públicas: easy-rsa”) by using the
TrustedUserCAKeys
and
HostCertificate
directives in
/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 the clients can also be configured to trust the host key signed by the same authority, making it easier to maintain the known_hosts
file (even system wide via /etc/ssh/known_hosts
).
@cert-authority *.falcot.com ssh-rsa AAAA[..]
Both, public key and certificate authentication, can be used alongside each other.
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 usuário tem que também 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
Suas 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
abrir uma conexão a partir da máquina local na porta 25 do
server, e fazer 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 ao servidor 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 o servidor. Na prática, o servidor é 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) permite o acesso remoto ao ambiente de trabalho (desktops) gráfico.
Essa ferramenta é, na maioria das vezes, usada para assistência técnica; o administrador pode ver os erros com os quais o usuário está enfrentando, e mostrar a eles um curso de ação correto, sem estar fisicamente presente.
First, the user must authorize sharing their session. The GNOME graphical desktop environment includes that option via → (contrary to previous versions of Debian, where the user had to install and run vino
). For this to work network-manager must be managing the network used (e.g. enable the managed
mode for devices handled by ifupdown in /etc/NetworkManager/NetworkManager.conf
). KDE Plasma still requires using krfb
to allow sharing an existing session over VNC. For other graphical desktop environments, the x11vnc
or tightvncserver
commands (from the Debian packages of the same name) or tigervncserver
(tigervnc-standalone-server) serve the same purpose and provide the vnc-server virtual package; you can make either of them available to the user with an explicit menu or desktop entry.
When the graphical session is made available by VNC, the administrator must connect to it with a VNC client. GNOME has vinagre
and remmina
for that, while the KDE project provides krdc
(in the menu at → → ). There are other VNC clients that use the command line, such as xtightvncviewer
from the homonym package or xtigervncviewer
from the tigervnc-viewer Debian package. Once connected, the administrator can see what is going on, work on the machine remotely, and show the user how to proceed.