scp over SFTP: skriv fjernstier, der faktisk kan slås op
Moderne scp overfører via SFTP, så tilde-udvidelse og jokertegn opfører sig anderledes. Skriv eksplicitte serverstier, og vælg protokollen med vilje.
En scp-kommando, der har virket i et script i årevis, kan fejle på en aktuel klient med en stifejl, der intet har med tunnelen at gøre. VPN'et bar bytes; klienten bad serveren om et navn, som serveren ikke kunne slå op. Aktuel OpenSSH-scp overfører som standard via SFTP, og SFTP udfører ikke shell-agtig udvidelse som den gamle protokol. Når du følger kommandoen ud fra din egen konto, ser du, hvor stien faktisk fortolkes.
Start med kontoen og derefter den mappe, den kan skrive i
Kolonnen deler to navnerum, og kun venstre side tilhører maskinen, du skriver på. Alt efter den slås op af serveren under den konto, du godkendte som, inden for den filsystemvisning, kontoen har. Bekræft begge, før du sammensætter kommandoen, for en sti, der er korrekt for administratoren, er ikke automatisk korrekt for overførselsbrugeren. Forskellen er kilden til de fleste tilladelsesfejl, der ligner netværksfejl.
Spørg serveren om dens egen visning: ssh [email protected] pwd og ssh [email protected] ls -ld /srv/archive. Hvis den anden kommando rapporterer adgang nægtet, er tunnelen i orden, og stien er ubrugelig for den konto. Ret ejerskabet, eller vælg en anden destination i stedet for at udvide tilladelserne, så overførslen kan fortsætte.
En begrænset SFTP-konfiguration kan præsentere en chroot som filsystemets rod. Inde i den visning er en absolut sti absolut inden for chrooten, hvilket ikke er samme sted, som administratoren ser på værten.
Navngiv begge sider af kolonnen eksplicit
En upload bør angive fjernfilnavnet i stedet for at antage, at det lokale basisnavn accepteres på den anden side.
scp q3-invoice.csv [email protected]:/home/transfer/drop/q3-invoice.csvEn download bør angive den lokale destination af præcis samme grund. De to navnerum er uafhængige, og et script, der antager, at de passer sammen, knækker første gang, fjerntræet bruger en anden struktur.
scp [email protected]:/srv/archive/2026-q3.csv ./2026-q3.csvUndgå ~otheruser i et vedligeholdt script. Udvidelse af en anden kontos hjemmemappe var en fjernshell-funktion, og en SFTP-server implementerer måske ikke den udvidelse, der efterligner den. Skriv den absolutte sti, kontoen faktisk kan åbne, og sæt lokale stier med mellemrum i anførselstegn i stedet for at kopiere anførselstegnslag skrevet til en shell på serveren.
Ved, hvilken protokol din scp faktisk bruger
Siden OpenSSH 9.0 bruger klienten SFTP som standard, og distributioner overtager eller backporterer den adfærd efter deres egen tidsplan. Versionsstrengen fortæller, hvad klienten har til hensigt, men et leverandørbuild kan afvige fra upstream, så kontroller den klient, du faktisk kører: ssh -V.
De to protokoller slår navne op forskelligt. Gammel SCP beder fjernbrugerens shell om at udvide stien, så jokertegn og tilder håndteres af den shell efter dens egne regler. SFTP udsteder i stedet filoverførselsoperationer, så et jokertegn enten udvides af klienten eller slet ikke udvides. Begge rejser inde i SSH til samme maskine, og derfor kan én vært opføre sig forskelligt under to klienter.
scp -v udskriver det subsystem, den anmoder om, og en sftp-subsystemlinje bekræfter, at den moderne sti bruges. scp -O tvinger den gamle protokol, hvor den understøttes og virkelig kræves, og den bringer sine egne anførselstegnregler med tilbage. Det er ikke en VPN-indstilling, ikke en måde at aktivere noget på serveren og ikke en grund til at lempe værtsnøglekontrollen.
Test stien, før scriptet afhænger af den
Et stifejl dukker op på det værst tænkelige tidspunkt i et automatisk job om natten uden nogen til at kigge. Bevis først destinationen med en lille fil og den præcise konto, jobbet bruger, og opbevar testkommandoen ved siden af jobdefinitionen. Hvis testen kræver en anden konto eller en anden mappe, gør jobbet også.
Kontroller også serversiden. grep -i subsystem /etc/ssh/sshd_config viser, om et SFTP-subsystem er konfigureret, og sftp -b /dev/null [email protected] afsluttes kun med succes, når det subsystem svarer. En vært, der accepterer SSH-logins, men ikke har noget subsystem, fejler ved enhver moderne overførsel, mens den ser helt sund ud i en login-test.
Notér klientversionen, den anvendte protokol og den absolutte fjernsti i jobnotaterne. Når den næste opgradering ændrer en standard, er den note forskellen mellem en fem minutters rettelse og en eftermiddag med gætterier.