SFTP (SSH File Transfer Protocol) és un protocol per transferir i gestionar fitxers a través d’una connexió SSH. Tot viatja xifrat (usuari, contrasenya i dades), i fa servir el mateix port, els mateixos usuaris i les mateixes claus que ssh. Per això ha substituït l’antic FTP, que ho envia tot en clar. En aquesta guia veuràs com fer-lo servir des del terminal i com configurar un servidor perquè certs usuaris només hi puguin entrar per SFTP, tancats en un directori.
Una confusió habitual: SFTP no és FTP amb xifratge. Això és FTPS (FTP sobre TLS), un altre protocol que necessita un servidor FTP. SFTP és part d’SSH.
El client: la comanda sftp
Si pots entrar a un servidor amb ssh, normalment també hi pots entrar amb sftp:
$ sftp joan@servidor.exemple.com
Connected to servidor.exemple.com.
sftp>
Amb un port diferent del 22, fes servir -P (majúscula, com a scp):
sftp -P 2222 joan@servidor.exemple.com
També entén els noms curts de ~/.ssh/config (sftp web) i l’opció -i per indicar una clau.
Comandes de la sessió
Un cop dins, tens un prompt sftp> amb comandes semblants a les del terminal. Les que comencen per l actuen a la màquina local:
| Comanda | Què fa |
|---|---|
ls, cd, pwd | Llistar, canviar de directori i veure on ets, al servidor |
lls, lcd, lpwd | El mateix, a la teva màquina |
get fitxer | Baixa un fitxer del servidor |
put fitxer | Puja un fitxer al servidor |
get -r dir, put -r dir | Baixa o puja un directori sencer |
reget, reput | Reprèn una baixada o una pujada que s’havia tallat |
mkdir, rmdir, rm | Crear directoris, esborrar directoris buits i fitxers |
rename vell nou | Canviar el nom d’un fitxer |
chmod 640 fitxer | Canviar permisos |
df -h | Espai lliure al servidor (si el servidor ho admet) |
!comanda | Executa una comanda a la teva màquina |
help o ? | Llista de comandes |
bye, exit, quit | Sortir |
Exemple de sessió
sftp> cd /var/www/documents
sftp> put informe.pdf
sftp> get -r imatges
sftp> lcd ~/Baixades
sftp> get "acta reunió.odt"
sftp> bye
Els noms amb espais van entre cometes. get i put accepten comodins: get *.log baixa tots els .log del directori remot.
Sense entrar en mode interactiu
Si a l’adreça hi poses la ruta d’un fitxer, sftp el baixa al directori actual i surt. Si la ruta és un directori, hi entra i et deixa al prompt:
sftp joan@servidor.exemple.com:/var/log/nginx/error.log
sftp joan@servidor.exemple.com:/var/www/
O executar una llista de comandes d’un fitxer, útil en scripts (amb una clau SSH, perquè no demani la contrasenya):
$ cat pujada.txt
cd /backup
put copia.tar.gz
bye
$ sftp -b pujada.txt joan@servidor.exemple.com
El servidor: SFTP ja ve activat
Si el servidor té OpenSSH (openssh-server), SFTP ja funciona: no cal instal·lar res. Al fitxer /etc/ssh/sshd_config hi ha una línia com aquesta (a Debian i Ubuntu):
Subsystem sftp /usr/lib/openssh/sftp-server
A Red Hat, Rocky i Alma la ruta és /usr/libexec/openssh/sftp-server.
Usuaris només per a SFTP, tancats en un directori
Un cas molt habitual: vols que un client o un programa pugui pujar fitxers, però que no tingui accés al shell ni pugui veure la resta del servidor. Es fa amb una gàbia (chroot) i la directiva ForceCommand internal-sftp.
1. Crea un grup i l’usuari
sudo groupadd sftpusers
sudo useradd -m -g sftpusers -s /usr/sbin/nologin client1
sudo passwd client1
L’usuari té nologin com a shell perquè no pugui obrir una sessió normal.
2. Prepara el directori de la gàbia
Aquí és on falla la majoria de configuracions. SSH exigeix que el directori de la gàbia, i tots els directoris de la ruta fins a l’arrel, siguin de root i que ni el grup ni els altres hi puguin escriure. Si no, la connexió es tanca just després d’autenticar-se. Per tant, l’usuari no pot escriure a l’arrel de la seva gàbia: cal crear-hi un subdirectori que sí que sigui seu.
sudo mkdir -p /srv/sftp/client1/pujades
sudo chown root:root /srv/sftp/client1
sudo chmod 755 /srv/sftp/client1
sudo chown client1:sftpusers /srv/sftp/client1/pujades
3. Configura sshd
Afegeix això al final de /etc/ssh/sshd_config. Els blocs Match s’apliquen fins al següent Match o fins al final del fitxer, i per això han d’anar al final:
Match Group sftpusers
ChrootDirectory /srv/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Match Groupaplica la configuració a tots els usuaris del grup (ambMatch User client1només a un).%ues substitueix pel nom de l’usuari, de manera que cadascú té la seva gàbia.internal-sftpés un servidor SFTP integrat asshdque no necessita cap fitxer dins la gàbia.- L’original posava també
PasswordAuthentication yes. Només cal si al servidor l’has desactivat en general i vols permetre contrasenyes a aquests usuaris. Sempre que puguis, fes servir claus.
4. Comprova la configuració i reinicia el servei
Abans de reiniciar, comprova que no hi hagi errors (si n’hi ha, el servei no arrencaria i et podries quedar sense accés):
sudo sshd -t
sudo systemctl restart ssh
A Red Hat, Rocky, Alma i Fedora el servei es diu sshd: sudo systemctl restart sshd. La comanda service ssh restart de l’original encara funciona a molts sistemes, però és la manera antiga; amb systemd, fes servir systemctl.
Mantén oberta la sessió SSH que tens mentre proves la configuració des d’un altre terminal: si alguna cosa falla, encara podràs arreglar-ho.
5. Prova-ho
$ sftp client1@servidor.exemple.com
sftp> pwd
Remote working directory: /
sftp> ls
pujades
sftp> cd pujades
sftp> put factura.pdf
L’usuari veu /, però en realitat és /srv/sftp/client1, i no en pot sortir. Si prova d’entrar amb ssh, la connexió es tanca.
Si alguna cosa no va, mira els registres del servidor: sudo journalctl -u ssh -n 50 (o -u sshd). L’error típic és bad ownership or modes for chroot directory, que vol dir que un directori de la ruta no és de root o té permisos d’escriptura per al grup o els altres.
SFTP, SCP o rsync?
| Eina | Quan fer-la servir |
|---|---|
sftp | Navegar pel servidor i transferir fitxers de manera interactiva; usuaris restringits |
scp | Copiar un fitxer o directori d’una tirada (avui també fa servir SFTP per sota) |
rsync | Sincronitzar directoris i còpies que es repeteixen: només envia el que ha canviat |
Si prefereixes un entorn gràfic, programes com FileZilla o WinSCP (a Windows), i els gestors de fitxers de GNOME i KDE (amb una adreça sftp://servidor), també fan servir SFTP.