scp över SFTP: skriva fjärrsökvägar som faktiskt löses upp
Modern scp överför via SFTP, så tilde-expansion och jokertecken beter sig annorlunda. Skriv explicita servervägar och välj protokoll med avsikt.
Ett scp-kommando som fungerade i ett skript i åratal kan misslyckas på en aktuell klient med ett sökvägsfel som inte har något med tunneln att göra. VPN:en transporterade byten; klienten bad servern om ett namn som servern inte kunde lösa upp. Aktuell OpenSSH-scp överför som standard via SFTP, och SFTP gör ingen expansion i skalsstil som det gamla protokollet. Att följa kommandot ut från ditt eget konto visar var sökvägen faktiskt tolkas.
Börja med kontot och sedan katalogen det kan skriva i
Kolonnet skiljer två namnrymder, och bara vänster sida tillhör maskinen du skriver på. Allt efter det löses upp av servern, under kontot du autentiserade dig som, inom den filsystemsvy det kontot har. Bekräfta båda innan du sätter ihop kommandot, eftersom en sökväg som är korrekt för administratören inte automatiskt är korrekt för överföringsanvändaren. Den skillnaden är källan till de flesta behörighetsfel som ser ut som nätverksfel.
Fråga servern om dess egen vy: ssh [email protected] pwd och ssh [email protected] ls -ld /srv/archive. Om det andra kommandot rapporterar att åtkomst nekats är tunneln i ordning och sökvägen oanvändbar för det kontot. Rätta ägandet eller välj ett annat mål i stället för att utöka behörigheterna så att överföringen kan fortsätta.
En begränsad SFTP-konfiguration kan presentera en chroot som filsystemets rot. Inom den vyn är en absolut sökväg absolut inom chrooten, vilket inte är samma plats som administratören ser på värden.
Namnge båda sidorna av kolonnet explicit
En uppladdning bör ange fjärrfilnamnet i stället för att anta att det lokala basnamnet accepteras på andra sidan.
scp q3-invoice.csv [email protected]:/home/transfer/drop/q3-invoice.csvEn nedladdning bör ange det lokala målet av exakt samma skäl. De två namnrymderna är oberoende, och ett skript som antar att de matchar går sönder första gången fjärrträdet använder en annan struktur.
scp [email protected]:/srv/archive/2026-q3.csv ./2026-q3.csvUndvik ~otheruser i ett underhållet skript. Att expandera ett annat kontos hemkatalog var en fjärrskalsfunktion, och en SFTP-server implementerar kanske inte den utökning som efterliknar den. Skriv den absoluta sökväg kontot faktiskt kan öppna, och sätt lokala sökvägar med mellanslag inom citattecken i stället för att kopiera citatteckenslager skrivna för ett skal på servern.
Vet vilket protokoll din scp faktiskt använder
Sedan OpenSSH 9.0 använder klienten SFTP som standard, och distributioner antar eller backportar det beteendet enligt sitt eget schema. Versionssträngen berättar vad klienten avser, men ett leverantörsbygge kan skilja sig från upstream, så kontrollera klienten du faktiskt kör: ssh -V.
De två protokollen löser upp namn olika. Gammal SCP ber fjärranvändarens skal att expandera sökvägen, så jokertecken och tilder hanteras av det skalet enligt dess egna regler. SFTP utfärdar i stället filöverföringsoperationer, så ett jokertecken expanderas antingen av klienten eller inte alls. Båda färdas inuti SSH till samma maskin, och därför kan en värd bete sig olika under två klienter.
scp -v skriver ut det undersystem den begär, och en sftp-undersystemrad bekräftar att den moderna sökvägen används. scp -O tvingar det gamla protokollet där det stöds och verkligen krävs, och det tar med sig sina egna citatteckensregler tillbaka. Det är inte ett VPN-alternativ, inte ett sätt att aktivera något på servern och inte ett skäl att lätta på värdnyckelkontrollen.
Testa sökvägen innan skriptet förlitar sig på den
Ett sökvägsproblem dyker upp vid sämsta möjliga tidpunkt, i ett automatiserat jobb på natten utan att någon tittar. Bevisa målet först med en liten fil och det exakta konto jobbet använder, och håll det testkommandot bredvid jobbdefinitionen. Om testet behöver ett annat konto eller en annan katalog behöver jobbet det också.
Kontrollera även serversidan. grep -i subsystem /etc/ssh/sshd_config visar om ett SFTP-undersystem är konfigurerat, och sftp -b /dev/null [email protected] avslutas bara framgångsrikt när det undersystemet svarar. En värd som accepterar SSH-inloggningar men inte har något undersystem misslyckas vid varje modern överföring medan den ser helt frisk ut i ett inloggningstest.
Notera klientversionen, protokollet som används och den absoluta fjärrsökvägen i jobbanteckningarna. När nästa uppgradering ändrar en standard är den anteckningen skillnaden mellan en femminutersrättelse och en eftermiddag av gissningar.