Príkaz scp, ktorý roky fungoval v skripte, môže na súčasnom klientovi zlyhať s chybou cesty, ktorá nemá nič spoločné s tunelom. VPN preniesla bajty; klient požiadal server o názov, ktorý server nedokázal vyriešiť. Súčasný OpenSSH scp prenáša predvolene cez SFTP a SFTP nevykonáva rozbalenie v štýle shellu ako starší protokol. Prejdenie príkazu od vlastného účtu smerom von ukáže, kde sa cesta naozaj interpretuje.

Začnite pri účte, potom pri adresári, do ktorého môže zapisovať

Dvojbodka oddeľuje dva menné priestory a iba ľavá strana patrí stroju, na ktorom píšete. Všetko po nej rieši server, pod účtom, ktorým ste sa overili, v rámci akéhokoľvek pohľadu na súborový systém, ktorý tento účet má. Potvrďte oboje pred zostavením príkazu, pretože cesta správna pre administrátora nie je automaticky správna pre používateľa prenosu. Tento rozdiel je zdrojom väčšiny chýb oprávnení, ktoré vyzerajú ako sieťové poruchy.

Opýtajte sa servera na jeho vlastný pohľad: ssh [email protected] pwd a ssh [email protected] ls -ld /srv/archive. Ak druhý príkaz hlási odmietnutie oprávnenia, tunel je v poriadku a cesta je pre tento účet nepoužiteľná. Opravte vlastníctvo alebo vyberte iné cieľové umiestnenie namiesto rozširovania oprávnení, aby prenos mohol pokračovať.

Obmedzená konfigurácia SFTP môže ako koreň súborového systému predstaviť chroot. V tomto pohľade je absolútna cesta absolútna v rámci chrootu, čo nie je rovnaké miesto, ktoré administrátor vidí na hostiteľovi.

Pomenujte obe strany dvojbodky výslovne

Nahranie by malo uviesť vzdialený názov súboru, namiesto predpokladu, že miestny základný názov bude na druhej strane prijateľný.

scp q3-invoice.csv [email protected]:/home/transfer/drop/q3-invoice.csv

Stiahnutie by malo uviesť miestny cieľ z presne toho istého dôvodu. Oba menné priestory sú nezávislé a skript, ktorý predpokladá, že sa zhodujú, sa prvýkrát rozbije, keď vzdialený strom použije iné usporiadanie.

scp [email protected]:/srv/archive/2026-q3.csv ./2026-q3.csv

Vyhnite sa ~otheruser v udržiavanom skripte. Rozbalenie domovského adresára iného účtu bola funkcia vzdialeného shellu a server SFTP nemusí implementovať rozšírenie, ktoré ju emuluje. Napíšte absolútnu cestu, ktorú účet naozaj dokáže otvoriť, a miestne cesty s medzerami uzavrite do úvodzoviek, namiesto kopírovania vrstiev úvodzoviek napísaných pre shell na serveri.

Vedzte, ktorý protokol váš scp naozaj používa

Od OpenSSH 9.0 klient predvolene používa SFTP a distribúcie toto správanie preberajú alebo backportujú podľa vlastného harmonogramu. Reťazec verzie hovorí, čo klient zamýšľa, ale zostavenie dodávateľa sa môže líšiť od upstreamu, preto skontrolujte klienta, ktorý naozaj spúšťate: ssh -V.

Oba protokoly riešia názvy odlišne. Starší SCP žiada vzdialený používateľský shell, aby cestu rozbalil, takže zástupné znaky a vlnovky spracúva tento shell podľa vlastných pravidiel. SFTP namiesto toho vydáva operácie prenosu súborov, takže zástupný znak buď rozbalí klient, alebo sa nerozbalí vôbec. Oba cestujú vnútri SSH k tomu istému stroju, a preto sa jeden hostiteľ môže správať inak pod dvoma klientmi.

scp -v vypíše subsystém, ktorý požaduje, a riadok subsystému sftp potvrdzuje, že sa používa moderná cesta. scp -O vynucuje starší protokol tam, kde je podporovaný a skutočne potrebný, a prináša so sebou späť vlastné pravidlá úvodzoviek. Nie je to voľba VPN, nie je to spôsob, ako na serveri niečo povoliť, a nie je to dôvod zmierniť kontrolu kľúča hostiteľa.

Otestujte cestu, kým na nej skript začne závisieť

Problém s cestou sa objaví v najhoršom možnom čase, v automatizovanej úlohe v noci, keď sa nikto nepozerá. Najprv preukážte cieľ malým súborom a presným účtom, ktorý úloha používa, a testovací príkaz uchovajte vedľa definície úlohy. Ak test potrebuje iný účet alebo iný adresár, bude ich úloha potrebovať tiež.

Skontrolujte aj stranu servera. grep -i subsystem /etc/ssh/sshd_config ukazuje, či je nakonfigurovaný subsystém SFTP, a sftp -b /dev/null [email protected] skončí úspešne iba vtedy, keď tento subsystém odpovie. Hostiteľ, ktorý prijíma prihlásenia SSH, ale nemá subsystém, zlyhá pri každom modernom prenose, pričom v teste prihlásenia vyzerá úplne zdravo.

Zaznamenajte verziu klienta, používaný protokol a absolútnu vzdialenú cestu do poznámok k úlohe. Keď budúci upgrade zmení predvolenú hodnotu, táto poznámka je rozdiel medzi päťminútovou opravou a popoludním hádania.

Súvisiace články