Configurando um SFTP Server
Contexto
Recentemente em meu trabalho, surgiu uma demanda para realizar o upload de arquivos em um Windows Server do Cliente a partir de uma aplicação presente em outro servidor (Ubuntu), e fui questionado se era possível. Disse que poderíamos utilizar o protocolo SFTP para isso, e após a validação da equipe, fui responsável por estudar e entender como configurar um servidor para esse protocolo, para depois adicionarmos no servidor do cliente a configuração.
Estudando um pouco, vi que o SFTP utiliza o protocolo SSH para realizar uma sessão de comunicação segura entre o cliente e Servidor, o que significa que o protocolo SFTP se preocupe em apenas realizar suas operações, como busca e envio de arquivos, deixando a segurança com o SSH. Decidi então simular essa configuração na minha rede local, para entender de uma vez como configurar e utilizar um servidor SFTP.
Nota: (Estou escrevendo isso enquanto configuro minha simulação. Os tempos verbais devem se misturar um pouco, não se preocupe quanto à isso).
Como vai funcionar?
A minha simulação será feita utilizando duas máquinas: Uma computador com Ubuntu26.04 (o cliente), e uma vm com Ubuntu24.04 (o servidor sftp). Por mais que a simulação não seja 100% real com o cenário que irei atuar, a configuração de chaves, serviços e permissões me darão uma boa base para quando for replicar no servidor do cliente.
Pesquisando um pouco, vi que instalar o openssh-server em meu servidor será o suficiente para utilzar o sftp, já que ele roda em cima do protocolo SSH. O OpenSSH é um conjunto de ferramentas de código aberto que oferece serviço de acesso remoto à computadores a partir do protocolo SSH, e o primeiro passo será justamente instalá-lo em nosso servidor
Nota 2: Esse post não é um tutorial, mas sim um registro de como fiz para configurar os serviços
Configurando o Servidor
Autenticado no servidor, instalei o openssh-server via apt
Criei um grupo novo, e na sequência um novo usuário, adicionando-o no grupo criado anteriormente
Após ter criado o novo grupo e o novo usuário, executei mais alguns comandos de criação de diretórios e permissões dentro do ‘servidor’
sudo chown root:root /home/my-sftp-user
sudo chmod 755 /home/my-sftp-user
sudo mkdir -p /home/my-sftp-user/upload
sudo chown my-sftp-user:my-sftp-user /home/my-sftp-user/upload
sudo chmod 755 /home/my-sftp-user/uploadFoi criado uma pasta chamada upload, dentro do diretório
/home/my-sftp-user, nós iremos subir o arquivo de teste dentro dessa pasta. Da primeira vez que realizei esse teste eu subi o arquivo diretamente em/home/my-sftp-user, mas para documentar preferi fazer dessa forma.
Acessei o modo de edição do arquivo /etc/ssh/sshd_config e adicionei o seguinte bloco ao final do arquivo e salvei:
Significado das configurações:
Match group my-sftp-group» As configurações só serão aplicadas para os usuários que estão no grupo ‘my-sftp-group’ChrootDirectory /home/my-sftp-user» Confira qual será a pasta raiz a partir da conexão SFTP. Nesse caso, o diretório raiz será /home/my-sftp-user, isso significa que eu não consigo acessar uma pasta que esteja um nível acima, como/homeou/home/vinicius.x11Forwarding no» Desabilita o encaminhamento gráfico X11, o usuário não consegue abrir aplicações gráficas de forma remota via SSHAllowTcpForwarding no» Desabilita túnel/redirecionamento TCP pelo SSHForceCommand internal-sftp» Força o usuário a utilizar somente ao protocolo SFTP
Após salvar o arquivo de configuração no servidor, vou mudar o ambiente para a máquina do cliente. Vou acessar o servidor sftp usando algumas credenciais: Nome do usuário criado anteriormente, a senha desse usuário e o endereço IP do servidor SFTP, e na sequência enviar o arquivo file.txt para a pasta upload

Sucesso, o arquivo subiu para a pasta do nosso usuário no servidor sem nenhum problema. Voltando no servidor para visualizar o arquivo enviado anteriormente, conseguimos achar ele:

Após ter feito essa pequena prova de conceito, realizei toda a configuração no ambiente do cliente, sendo o Windows Server o Servidor SFTP, e a VPS com Ubuntu o cliente. A equipe de desenvolvimento realizou os testes e tudo funcionou perfeitamente. Vou deixar nas referências o vídeo que utilizei como base.