scp sobre SFTP: escriure rutes remotes que realment es resolen
L'scp modern transfereix per SFTP, així que l'expansió de la titlla i els comodins es comporten diferent. Escriviu rutes de servidor explícites i trieu el protocol a propòsit.
Una ordre scp que ha funcionat en un script durant anys pot fallar en un client actual amb un error de ruta que no té res a veure amb el túnel. La VPN va portar els bytes; el client va demanar al servidor un nom que el servidor no va poder resoldre. L'scp actual d'OpenSSH transfereix per SFTP per defecte, i SFTP no fa expansió a l'estil d'intèrpret com feia el protocol antic. Recórrer l'ordre des del vostre propi compte cap enfora mostra on s'interpreta realment la ruta.
Comenceu pel compte i després pel directori on pot escriure
Els dos punts separen dos espais de noms, i només el costat esquerre pertany a la màquina on escriviu. Tot el que hi ha després ho resol el servidor, sota el compte amb què us heu autenticat, dins de la vista del sistema de fitxers que tingui aquest compte. Confirmeu tots dos abans de compondre l'ordre, perquè una ruta correcta per a l'administrador no és automàticament correcta per a l'usuari de la transferència. Aquesta diferència és l'origen de la majoria d'errors de permisos que semblen fallades de xarxa.
Pregunteu al servidor per la seva pròpia vista: ssh [email protected] pwd i ssh [email protected] ls -ld /srv/archive. Si la segona ordre informa de permís denegat, el túnel està bé i la ruta no és utilitzable per a aquest compte. Corregiu la propietat o trieu una altra destinació en lloc d'ampliar permisos perquè la transferència pugui continuar.
Una configuració SFTP restringida pot presentar un chroot com a arrel del sistema de fitxers. Dins d'aquesta vista una ruta absoluta és absoluta dins del chroot, que no és el mateix lloc que l'administrador veu a l'amfitrió.
Anomeneu explícitament tots dos costats dels dos punts
Una pujada ha d'indicar el nom del fitxer remot en lloc de suposar que el nom base local serà acceptable a l'altre costat.
scp q3-invoice.csv [email protected]:/home/transfer/drop/q3-invoice.csvUna baixada ha d'indicar la destinació local exactament pel mateix motiu. Els dos espais de noms són independents, i un script que suposa que coincideixen es trenca la primera vegada que l'arbre remot fa servir una disposició diferent.
scp [email protected]:/srv/archive/2026-q3.csv ./2026-q3.csvEviteu ~otheruser en un script que es mantingui. Expandir el directori personal d'un altre compte era una funció de l'intèrpret remot, i un servidor SFTP pot no implementar l'extensió que ho emula. Escriviu la ruta absoluta que el compte pot obrir realment, i entre cometes les rutes locals amb espais en lloc de copiar capes de cometes escrites per a un intèrpret al servidor.
Sapigueu quin protocol fa servir realment el vostre scp
Des d'OpenSSH 9.0 el client fa servir SFTP per defecte, i les distribucions adopten o retroporten aquest comportament segons el seu calendari. La cadena de versió diu què pretén el client, però una compilació de proveïdor pot diferir de l'upstream, així que comproveu el client que realment executeu: ssh -V.
Els dos protocols resolen noms de manera diferent. L'SCP antic demana a l'intèrpret de l'usuari remot que expandeixi la ruta, així que els comodins i les titlles els gestiona aquest intèrpret amb les seves pròpies regles. SFTP emet operacions de transferència de fitxers, així que un comodí o l'expandeix el client o no s'expandeix gens. Tots dos viatgen dins d'SSH a la mateixa màquina, i per això un amfitrió pot comportar-se diferent amb dos clients.
scp -v imprimeix el subsistema que demana, i una línia de subsistema sftp confirma que s'usa la ruta moderna. scp -O força el protocol antic allà on és suportat i realment necessari, i hi torna a portar les seves pròpies regles de cometes. No és una opció de VPN, no és una manera d'habilitar res al servidor i no és una raó per relaxar la verificació de la clau de l'amfitrió.
Proveu la ruta abans que l'script en depengui
Un problema de ruta surt en el pitjor moment possible, en una tasca automatitzada de nit sense ningú vigilant. Proveu primer la destinació amb un fitxer petit i el compte exacte que fa servir la tasca, i manteniu aquesta ordre de prova al costat de la definició de la tasca. Si la prova necessita un altre compte o un altre directori, la tasca també en necessitarà.
Comproveu també el costat del servidor. grep -i subsystem /etc/ssh/sshd_config mostra si hi ha un subsistema SFTP configurat, i sftp -b /dev/null [email protected] surt amb èxit només quan aquest subsistema respon. Un amfitrió que accepta inicis de sessió SSH però no té subsistema falla en tota transferència moderna tot i semblar perfectament sa en una prova d'inici de sessió.
Anoteu la versió del client, el protocol en ús i la ruta remota absoluta a les notes de la tasca. Quan la propera actualització canviï un valor per defecte, aquesta nota és la diferència entre una correcció de cinc minuts i un matí d'endevinar.