Acessando computadores remotamente via SSH
O SSH é o protocolo mais famoso e usado para acessar computadores remotamente via terminal (linha de comando, prompt de comando). Para o acesso remoto SSH funcionar você precisa:
No computador que será controlado remotamente ➤ instalar um servidor SSH
No computador que controlará o outro ➤ instalar um cliente SSH
Há alguns programas muito conhecidos de cliente e servidor SSH, tanto para Windows e Linux.
Instalando softwares de SSH
Linux
O Linux possui 2 softwares famosos de SSH. OpenSSH e o Dropbear.
O OpenSSH é o mais famoso e com mais funcionalidades, ele vem instalado por padrão nas distribuições mais comuns do Linux (Debian, Ubuntu, Mint, RHEL, Fedora, CentOS, ArchLinux).
O Dropbear é o mais usado em sistemas Linux embarcados. Ele é usado muito em roteadores tipo DD-WRT e OpenWRT por ser mais leve que o OpenSSH. Pessoas também costumam instalar ele no initramfs para decriptar remotamente sistemas com LUKS.
OpenSSH
O OpenSSH pode vir em dois pacotes diferentes:
- openssh-client para permitir que você controle outro computador remotamente
- openssh-server para permitir que outros computadores controlem o seu remotamente
Descubra se o openssh-client está instalado e sua versão com:
openssh -V# Aparecerá algo tipo: # OpenSSH_7.9p1 Debian-10+deb10u2, OpenSSL 1.1.1d 10 Sep 2019
Caso não encontre-o, instale-o:
# Debian / Ubuntu / Mintsudo apt install openssh-client
Descubra se o openssh-server está instalando e sua versão com:
# Debian / Ubuntu / Mintsudo dpkg -l openssh-server
Para instalá-lo use
# Debian / Ubuntu / Mintsudo apt install openssh-server
Uma vez instalado, o openssh-server fica sempre ligado, esperando conexões em forma de daemon/serviço. Verifique se ele está online pelo:
# Debian / Ubuntu / Mintsudo systemctl status ssh
Usando o OpenSSH client para iniciar o controle remoto!
# Acesso via senhassh [email protected] # Acesso com chave privada ssh -i /pasta/chave-privada.pem [email protected]
Usando o OpenSSH server para permitir que seu computador seja controlado remotamente!
sudo apt install openssh-server
Para mudar as configurações do servidor OpenSSH, edite o seguinte arquivo:
sudo nano /etc/ssh/sshd_config
Dropbear
Ainda não testei o Dropbear, mas pretendo fazer um tutorial. Se puder me ajudar envie nos comentários!
Windows
Putty - O cliente SSH mais conhecido no Windows
É o cliente SSH mais conhecido para Windows. Encontre-o aqui.
Kitty - Um fork (cópia) do Putty com algumas melhorias
Uma cópia do Putty que permite salvar logins e senhas das conexões. Encontre-o aqui.
Segurança do SSH
Ao iniciar uma conexão SSH é realizada 2 etapas de segurança:
- Verificação do SSH fingerprint (impressão digital SSH)
- Verificação da autenticação (login, senha, chaves...)
Verificação do SSH Fingerprint
Ao instalar o software de servidor SSH, uma chave pública e privada é gerada por ele no final da instalação.
Para o cliente iniciar uma conexão SSH totalmente segura, o cliente precisa saber de antemão a chave pública do servidor e salvá-la no SSHFP Resource Record. Não se assuste com o nome, em outras palavras: é só salvar a chave pública e o IP do servidor em um arquivo texto especial.
Por quê tudo isso? Porque conexões TCP/IP não são seguras (salvo raros casos)! Você não pode confiar em um IP, ter um endereço IP não é garantia suficiente de que aquela máquina é a qual você quer se conectar. Um computador invasor na rede pode facilmente assumir o IP da máquina remota e fingir ser ela, ficar esperando um cliente se conectar usando login e senha e anotá-los no momento em que a tentativa de conexão for realizada. É um problema de segurança bem sério, é o famoso Man-in-the-Middle.
Caso um cliente inicie uma conexão SSH, e a chave publica (SSH fingerprint) seja diferente do esperado, um aviso será dado pelo programa.
Caso o cliente inicie uma conexão SSH sem ter nenhuma chave pública (SSH fingerprint) cadastrada para aquele IP, o programa perguntará se você quer confiar naquela chave enviada pelo servidor e armazená-la para futuras conexões.
Verificação de autenticação
Depois da verificação do SSH Fingerprint, o cliente envia suas credenciais. As credenciais enviadas pelo cliente são basicamente uma interação tipo: "oi, eu sou fulano e essa é minha senha/chave, você me permite controlar a máquina remotamente?". Nesta etapa o servidor pode permitir ou negar o acesso. Se permitir, a conexão está feita e pronta para usar.
Existem alguns tipos de autenticação:
- Login e senha
- Login e chave Pública RSA
- Login e chave GPG
- Login e certificado X.509
Login e Senha
É a forma mais comum de simples de iniciar uma conexão SSH. Basta informar seu login e a senha do usuário e pronto.
Login e chave Pública/Privada RSA
É a forma mais recomendada e falada pelos "especialistas de segurança da internet". Nela, o cliente precisa criar uma chave pública e privada, salvar a chave pública na máquina remota (SSH server) e salvar a chave privada na máquina local (SSH client).
Login e chave GPG
Uma forma mais avançada para se conectar via SSH. Com uma chave GPG você pode usar um smart card como forma de autenticação. Aqui vai um ótimo tutorial para configurar SSH com GPG.
Login e certificado X.509
Por padrão o OpenSSH não suporta certificados X.509 para autenticação, mas existe um fork do OpenSSH por Roumen Petrov que implementa essa função. Leia mais nesta discussão do Stack Exchange.
É possível extrair a chave RSA de uma chave privada X.509, apesar disso, não podemos considerar isso como autenticação X.509, mas caso tenha interesse, veja esse tutorial.
Automatizando acesso SSH
O OpenSSH client não dá formas de conectar com login e senha automaticamente. Algumas formas estão descritas nessa discussão.
sshpass
É o software mais comum e recomendado, mas ele tem um problema sério: ele pula a verificação do SSH Fingerprint.
passh
Uma alternativa ao sshpass, mas verifica o SSH Fingerprint.
Confira o github.