scp preko SFTP-a: pisanje udaljenih putanja koje se zaista razrješavaju
Savremeni scp prenosi kroz SFTP, pa se proširenje tilde i džokeri ponašaju drugačije. Pišite eksplicitne serverske putanje i svjesno birajte protokol.
Naredba scp koja je godinama radila u skripti može pasti na savremenom klijentu s greškom putanje koja nema nikakve veze s tunelom. VPN je prenio bajtove; klijent je od servera tražio ime koje server nije mogao razriješiti. Savremeni OpenSSH scp prenosi kroz SFTP po defaultu, a SFTP ne radi proširenje u stilu ljuske kao što je radio stari protokol. Praćenje naredbe od vlastitog računa prema vani pokazuje gdje se putanja zaista tumači.
Počnite od računa, pa od direktorija u koji može pisati
Dvotačka dijeli dva imenska prostora, a samo lijeva strana pripada mašini na kojoj tipkate. Sve nakon nje razrješava server, pod računom s kojim ste se autentificirali, unutar bilo kojeg pogleda na datotečni sistem koji taj račun ima. Potvrdite oboje prije sastavljanja naredbe, jer putanja koja je ispravna za administratora nije automatski ispravna za korisnika prijenosa. Ta razlika je izvor većine grešaka s dozvolama koje izgledaju kao mrežni kvarovi.
Pitajte server za njegov vlastiti pogled: ssh [email protected] pwd i ssh [email protected] ls -ld /srv/archive. Ako druga naredba javi da je dozvola odbijena, tunel je u redu i putanja je neupotrebljiva za taj račun. Ispravite vlasništvo ili odaberite drugu odredišnu lokaciju umjesto proširivanja dozvola da bi prijenos mogao teći.
Ograničena SFTP konfiguracija može prikazati chroot kao korijen datotečnog sistema. Unutar tog pogleda apsolutna putanja je apsolutna unutar chroot-a, što nije isto mjesto koje administrator vidi na hostu.
Imenujte obje strane dvotačke eksplicitno
Slanje bi trebalo navesti udaljeno ime datoteke umjesto pretpostavke da će lokalno osnovno ime biti prihvatljivo na drugoj strani.
scp q3-invoice.csv [email protected]:/home/transfer/drop/q3-invoice.csvPreuzimanje bi trebalo navesti lokalno odredište iz potpuno istog razloga. Dva imenska prostora su nezavisna, a skripta koja pretpostavlja da se poklapaju puca prvi put kada udaljeno stablo koristi drugačiji raspored.
scp [email protected]:/srv/archive/2026-q3.csv ./2026-q3.csvIzbjegavajte ~otheruser u skripti koja se održava. Proširivanje matičnog direktorija drugog računa bila je funkcija udaljene ljuske, a SFTP server možda ne implementira ekstenziju koja je oponaša. Napišite apsolutnu putanju koju račun zaista može otvoriti i stavite lokalne putanje s razmacima pod navodnike umjesto kopiranja slojeva navodnika napisanih za ljusku na serveru.
Znajte koji protokol vaš scp zaista koristi
Od OpenSSH 9.0 klijent po defaultu koristi SFTP, a distribucije prihvataju ili backportaju to ponašanje po svom rasporedu. Verzijski niz govori šta klijent namjerava, ali dobavljačka gradnja može se razlikovati od upstreama, zato provjerite klijent koji zaista pokrećete: ssh -V.
Dva protokola razrješavaju imena različito. Stari SCP traži od udaljene korisničke ljuske da proširi putanju, pa džokere i tilde obrađuje ta ljuska po vlastitim pravilima. SFTP umjesto toga izdaje operacije prijenosa datoteka, pa džoker ili proširuje klijent ili se uopće ne proširuje. Oba putuju unutar SSH-a do iste mašine, zbog čega se jedan host može ponašati drugačije pod dva klijenta.
scp -v ispisuje podsistem koji traži, a red podsistema sftp potvrđuje da se koristi savremena putanja. scp -O prisiljava stari protokol tamo gdje je podržan i zaista potreban, i sa sobom vraća vlastita pravila navođenja. To nije VPN opcija, nije način da se nešto omogući na serveru i nije razlog da se olabavi provjera ključa hosta.
Testirajte putanju prije nego što se skripta na nju osloni
Problem putanje ispliva u najgorem mogućem trenutku, u automatizovanom poslu noću bez ikoga da gleda. Dokažite odredište prvo malom datotekom i tačnim računom koji posao koristi, i držite tu testnu naredbu uz definiciju posla. Ako test treba drugi račun ili drugi direktorij, poslu će također trebati.
Provjerite i serversku stranu. grep -i subsystem /etc/ssh/sshd_config pokazuje je li SFTP podsistem konfigurisan, a sftp -b /dev/null [email protected] završava uspješno samo kada taj podsistem odgovori. Host koji prihvata SSH prijave ali nema podsistem pada na svakom savremenom prijenosu dok u testu prijave izgleda savršeno zdravo.
Zabilježite verziju klijenta, protokol koji se koristi i apsolutnu udaljenu putanju u bilješke posla. Kada sljedeća nadogradnja promijeni default, ta bilješka je razlika između petominutne popravke i popodneva nagađanja.