scp преку SFTP: пишување оддалечени патеки што навистина се решаваат
Современиот scp пренесува преку SFTP, па проширувањето на тилда и џокер-знаците се однесуваат поинаку. Пишувајте експлицитни серверски патеки и изберете го протоколот намерно.
scp-команда што работела во скрипта со години може да не успее на тековен клиент со грешка во патеката што нема никаква врска со тунелот. VPN-от ги пренесе бајтите; клиентот го праша серверот за име што серверот не можеше да го реши. Тековниот OpenSSH scp стандардно пренесува преку SFTP, а SFTP не прави проширување во стил на школка како стариот протокол. Следењето на командата од вашата сметка кон надвор покажува каде патеката навистина се толкува.
Започнете од сметката, потоа од директориумот во кој може да пишува
Две точки делат два именски простора, и само левата страна и припаѓа на машината на која пишувате. Сѐ по неа го решава серверот, под сметката со која сте се автентицирале, во рамките на каков поглед на податотечниот систем има таа сметка. Потврдете ги двете пред да ја составите командата, зашто патека што е точна за администраторот не е автоматски точна за корисникот на преносот. Таа разлика е изворот на повеќето грешки со дозволи што изгледаат како мрежни дефекти.
Прашајте го серверот за неговиот сопствен поглед: ssh [email protected] pwd и ssh [email protected] ls -ld /srv/archive. Ако втората команда пријави одбиена дозвола, тунелот е во ред и патеката е неупотреблива за таа сметка. Поправете го сопствеништвото или изберете друга дестинација наместо да ги проширувате дозволите за преносот да продолжи.
Ограничена SFTP-конфигурација може да претстави chroot како корен на податотечниот систем. Внатре во тој поглед апсолутната патека е апсолутна во chroot-от, што не е истото место што администраторот го гледа на домаќинот.
Именувајте ги двете страни на двете точки експлицитно
Прикачувањето треба да го наведе оддалеченото име на податотеката наместо да претпоставува дека локалното основно име ќе биде прифатливо од другата страна.
scp q3-invoice.csv [email protected]:/home/transfer/drop/q3-invoice.csvПреземањето треба да ја наведе локалната дестинација од сосема истата причина. Двата именски простора се независни, и скриптата што претпоставува дека се совпаѓаат се крши првпат кога оддалеченото дрво користи поинаков распоред.
scp [email protected]:/srv/archive/2026-q3.csv ./2026-q3.csvИзбегнувајте ~otheruser во скрипта што се одржува. Проширувањето на домашниот директориум на друга сметка беше функција на оддалечената школка, и SFTP-серверот може да не го имплементира проширувањето што го емулира. Напишете ја апсолутната патека што сметката навистина може да ја отвори, и ставете локални патеки со празни места под наводници наместо да копирате слоеви наводници напишани за школка на серверот.
Знајте кој протокол вашиот scp навистина го користи
Од OpenSSH 9.0 клиентот стандардно користи SFTP, и дистрибуциите го прифаќаат или го пренесуваат наназад тоа однесување по свој распоред. Низата за верзија кажува што има намера клиентот, но изградбата на добавувачот може да се разликува од upstream, затоа проверете го клиентот што навистина го извршувате: ssh -V.
Двата протоколи ги решаваат имињата различно. Стариот SCP бара од оддалечената корисничка школка да ја прошири патеката, па џокер-знаците и тилдите ги обработува таа школка по свои правила. SFTP наместо тоа издава операции за пренос на податотеки, па џокер-знакот или го проширува клиентот или воопшто не се проширува. Двата патуваат внатре во SSH до истата машина, поради што еден домаќин може да се однесува различно под два клиенти.
scp -v го печати потсистемот што го бара, а линијата за потсистем sftp потврдува дека се користи современиот пат. scp -O го наметнува стариот протокол каде што е поддржан и навистина потребен, и ги враќа со себе сопствените правила за наводници. Тоа не е VPN-опција, не е начин да се овозможи нешто на серверот и не е причина да се олабави проверката на клучот на домаќинот.
Тестирајте ја патеката пред скриптата да се потпре на неа
Проблем со патеката се појавува во најлош можен момент, во автоматизирана работа ноќе кога никој не гледа. Докажете ја дестинацијата прво со мала податотека и точно таа сметка што ја користи работата, и чувајте ја таа тест-команда до дефиницијата на работата. Ако тестот бара друга сметка или друг директориум, и работата ќе ги бара.
Проверете ја и серверската страна. grep -i subsystem /etc/ssh/sshd_config покажува дали е конфигуриран SFTP-потсистем, а sftp -b /dev/null [email protected] завршува успешно само кога тој потсистем одговара. Домаќин што прифаќа SSH-најави но нема потсистем, не успева при секој современ пренос додека во тестот за најава изгледа сосема здраво.
Забележете ја верзијата на клиентот, протоколот што се користи и апсолутната оддалечена патека во белешките за работата. Кога следното ажурирање ќе промени стандард, таа белешка е разликата помеѓу петминутна поправка и попладне со погодувања.