scp per SFTP: skribi malproksimajn vojojn, kiuj vere solviĝas
Moderna scp transportas per SFTP, do la etendo de tilde kaj ĵokeraj signoj kondutas malsame. Skribu eksplicitajn servilajn vojojn kaj elektu la protokolon intence.
scp-komando, kiu funkciis en skripto dum jaroj, povas malsukcesi ĉe nuna kliento kun voja eraro, kiu neniel rilatas al la tunelo. La VPN portis la bajtojn; la kliento petis de la servilo nomon, kiun la servilo ne povis solvi. Nuna OpenSSH scp transportas defaŭlte per SFTP, kaj SFTP ne faras ŝel-stilan etendon kiel la malnova protokolo. Sekvante la komandon ekde via propra konto eksteren montras, kie la vojo vere interpretiĝas.
Komencu per la konto, poste per la dosierujo, en kiun ĝi povas skribi
La dupunkto dividas du nomspacojn, kaj nur la maldekstra flanko apartenas al la maŝino, sur kiu vi tajpas. Ĉion post ĝi solvas la servilo, sub la konto, per kiu vi aŭtentikigis, ene de iu ajn dosiersistema vido, kiun tiu konto havas. Konfirmu ambaŭ antaŭ ol kunmeti la komandon, ĉar vojo ĝusta por la administranto ne estas aŭtomate ĝusta por la transiga uzanto. Tiu diferenco estas la fonto de plej multaj permes-eraroj, kiuj aspektas kiel retaj paneoj.
Demandu la servilon pri ĝia propra vido: ssh [email protected] pwd kaj ssh [email protected] ls -ld /srv/archive. Se la dua komando raportas rifuzitan permeson, la tunelo estas en ordo kaj la vojo neuzebla por tiu konto. Riparu la posedon aŭ elektu alian celon anstataŭ vastigi permesojn, por ke la transigo povu daŭri.
Limigita SFTP-agordo povas prezenti chroot kiel la radikon de la dosiersistemo. Ene de tiu vido absoluta vojo estas absoluta ene de la chroot, kio ne estas la sama loko, kiun la administranto vidas sur la gastiganto.
Nomu ambaŭ flankojn de la dupunkto eksplicite
Alŝuto devus indiki la malproksiman dosiernomon anstataŭ supozi, ke la loka baza nomo estos akceptebla ĉe la alia flanko.
scp q3-invoice.csv [email protected]:/home/transfer/drop/q3-invoice.csvElŝuto devus indiki la lokan celon pro ĝuste la sama kialo. La du nomspacoj estas sendependaj, kaj skripto, kiu supozas, ke ili kongruas, rompiĝas la unuan fojon, kiam la malproksima arbo uzas alian aranĝon.
scp [email protected]:/srv/archive/2026-q3.csv ./2026-q3.csvEvitu ~otheruser en prizorgata skripto. Etendi la hejman dosierujon de alia konto estis funkcio de malproksima ŝelo, kaj SFTP-servilo eble ne efektivigas la etendon, kiu imitas ĝin. Skribu la absolutan vojon, kiun la konto vere povas malfermi, kaj metu lokajn vojojn kun spacoj inter citiloj anstataŭ kopii citilajn tavolojn skribitajn por ŝelo sur la servilo.
Sciu, kiun protokolon via scp vere uzas
Ekde OpenSSH 9.0 la kliento uzas SFTP defaŭlte, kaj distribuaĵoj adoptas aŭ retroportas tiun konduton laŭ sia propra horaro. La versioĉeno diras, kion la kliento intencas, sed vendista konstruo povas diferenci de upstream, do kontrolu la klienton, kiun vi vere rulas: ssh -V.
La du protokoloj solvas nomojn malsame. Malnova SCP petas la malproksiman uzantan ŝelon etendi la vojon, do ĵokeraj signoj kaj tildeoj estas traktataj de tiu ŝelo laŭ ĝiaj propraj reguloj. SFTP anstataŭe eldonas dosier-transigajn operaciojn, do ĵokera signo aŭ estas etendata de la kliento aŭ tute ne etendiĝas. Ambaŭ vojaĝas ene de SSH al la sama maŝino, kio estas kial unu gastiganto povas konduti malsame sub du klientoj.
scp -v presas la subsistemon, kiun ĝi petas, kaj linio de subsistemo sftp konfirmas, ke la moderna vojo estas uzata. scp -O devigas la malnovan protokolon, kie ĝi estas subtenata kaj vere necesa, kaj ĝi revenigas siajn proprajn citilajn regulojn. Ĝi ne estas VPN-opcio, ne maniero ebligi ion sur la servilo, kaj ne kialo malstreĉi la kontrolon de gastiganto-ŝlosilo.
Testu la vojon antaŭ ol la skripto dependos de ĝi
Voja problemo aperas en la plej malbona ebla tempo, en aŭtomatigita laboro nokte sen iu observanta. Pruvu la celon unue per malgranda dosiero kaj la ĝusta konto, kiun la laboro uzas, kaj tenu tiun testan komandon apud la labora difino. Se la testo bezonas alian konton aŭ alian dosierujon, la laboro ankaŭ bezonos.
Kontrolu ankaŭ la servilan flankon. grep -i subsystem /etc/ssh/sshd_config montras, ĉu SFTP-subsistemo estas agordita, kaj sftp -b /dev/null [email protected] sukcese finiĝas nur kiam tiu subsistemo respondas. Gastiganto, kiu akceptas SSH-salutojn sed havas neniun subsistemon, malsukcesas ĉe ĉiu moderna transigo dum ĝi aspektas tute sana en saluta testo.
Notu la klientan version, la uzatan protokolon kaj la absolutan malproksiman vojon en la laboraj notoj. Kiam la sekva ĝisdatigo ŝanĝos defaŭlton, tiu noto estas la diferenco inter kvin-minuta ripeto kaj posttagmezo da konjektado.