Příkaz scp, který roky fungoval ve skriptu, může na současném klientovi selhat s chybou cesty, která nemá nic společného s tunelem. VPN přenesla bajty; klient požádal server o název, který server nedokázal přeložit. Současné OpenSSH scp přenáší ve výchozím nastavení přes SFTP a SFTP neprovádí expanzi ve stylu shellu jako starší protokol. Projití příkazu od vašeho účtu směrem ven ukáže, kde se cesta skutečně interpretuje.

Začněte u účtu a potom u adresáře, do kterého může zapisovat

Dvojtečka odděluje dva jmenné prostory a pouze levá strana patří stroji, na kterém píšete. Vše po ní překládá server, pod účtem, kterým jste se ověřili, uvnitř jakéhokoli pohledu na souborový systém, který tento účet má. Potvrďte obojí před sestavením příkazu, protože cesta správná pro administrátora není automaticky správná pro uživatele přenosu. Tento rozdíl je zdrojem většiny chyb oprávnění, které vypadají jako síťové závady.

Zeptejte se serveru na jeho vlastní pohled: ssh [email protected] pwd a ssh [email protected] ls -ld /srv/archive. Pokud druhý příkaz hlásí odmítnutí oprávnění, tunel je v pořádku a cesta je pro tento účet nepoužitelná. Opravte vlastnictví nebo zvolte jiné cílové umístění, místo abyste rozšiřovali oprávnění, aby přenos mohl pokračovat.

Omezená konfigurace SFTP může jako kořen souborového systému představit chroot. Uvnitř tohoto pohledu je absolutní cesta absolutní v rámci chrootu, což není stejné místo, které administrátor vidí na hostiteli.

Pojmenujte obě strany dvojtečky výslovně

Nahrání by mělo uvést vzdálený název souboru, místo aby předpokládalo, že místní základní název bude na druhé straně přijatelný.

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

Stažení by mělo uvést místní cíl ze zcela stejného důvodu. Oba jmenné prostory jsou nezávislé a skript, který předpokládá, že se shodují, se poprvé rozbije, když vzdálený strom použije jiné uspořádání.

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

Vyhněte se ~otheruser v udržovaném skriptu. Expanze domovského adresáře jiného účtu byla funkcí vzdáleného shellu a server SFTP nemusí implementovat rozšíření, které ji emuluje. Napište absolutní cestu, kterou účet skutečně dokáže otevřít, a místní cesty s mezerami uzavřete do uvozovek, místo abyste kopírovali vrstvy uvozovek napsané pro shell na serveru.

Vězte, který protokol váš scp skutečně používá

Od OpenSSH 9.0 klient ve výchozím nastavení používá SFTP a distribuce toto chování přijímají nebo backportují podle svého harmonogramu. Řetězec verze říká, co klient zamýšlí, ale sestavení dodavatele se může lišit od upstreamu, proto zkontrolujte klienta, který skutečně spouštíte: ssh -V.

Oba protokoly překládají názvy odlišně. Starší SCP žádá vzdálený uživatelský shell, aby cestu expandoval, takže zástupné znaky a vlnovky zpracovává tento shell podle vlastních pravidel. SFTP místo toho vydává operace přenosu souborů, takže zástupný znak buď expanduje klient, nebo se neexpanduje vůbec. Oba cestují uvnitř SSH ke stejnému stroji, a proto se jeden hostitel může chovat různě pod dvěma klienty.

scp -v vypíše subsystém, který požaduje, a řádek subsystému sftp potvrzuje, že se používá moderní cesta. scp -O vynucuje starší protokol tam, kde je podporován a skutečně vyžadován, a přináší s sebou zpět vlastní pravidla pro uvozovky. Není to volba VPN, není to způsob, jak na serveru něco povolit, a není to důvod zmírnit kontrolu klíče hostitele.

Otestujte cestu, než na ní skript začne záviset

Problém s cestou se objeví v nejhorší možný okamžik, v automatizované úloze v noci, kdy se nikdo nedívá. Nejprve prokažte cíl malým souborem a přesným účtem, který úloha používá, a testovací příkaz uchovejte vedle definice úlohy. Pokud test potřebuje jiný účet nebo jiný adresář, bude je úloha potřebovat také.

Zkontrolujte i stranu serveru. grep -i subsystem /etc/ssh/sshd_config ukazuje, zda je nakonfigurován subsystém SFTP, a sftp -b /dev/null [email protected] skončí úspěšně pouze tehdy, když tento subsystém odpoví. Hostitel, který přijímá přihlášení SSH, ale nemá subsystém, selže u každého moderního přenosu, přitom v testu přihlášení vypadá naprosto zdravě.

Zaznamenejte verzi klienta, používaný protokol a absolutní vzdálenou cestu do poznámek k úloze. Až příští upgrade změní výchozí hodnotu, tato poznámka je rozdíl mezi pětiminutovou opravou a odpolednem hádání.

Související články