scp oor SFTP: afstandpaaie skryf wat werklik oplos
Moderne scp dra deur SFTP oor, so tilde-uitbreiding en wildkaarte werk anders. Skryf eksplisiete bedienerpaaie en kies die protokol doelbewus.
’n scp-opdrag wat jare lank in ’n skrip gewerk het, kan op ’n huidige kliënt misluk met ’n paadfout wat niks met die tonnel te doen het nie. Die VPN het die grepe gedra; die kliënt het die bediener om ’n naam gevra wat die bediener nie kon oplos nie. Huidige OpenSSH-scp dra standaard deur SFTP oor, en SFTP doen nie dopuitbreiding soos die ou protokol gedoen het nie. Om die opdrag vanaf jou eie rekening uit te werk, wys waar die pad werklik vertolk word.
Begin by die rekening, dan die gids wat dit kan skryf
Die dubbelpunt skei twee naamruimtes, en net die linkerkant behoort aan die masjien waarop jy tik. Alles daarna word deur die bediener opgelos, onder die rekening waarmee jy aangemeld het, binne watter lêerstelselbeskouing daardie rekening ook al het. Bevestig albei voordat jy die opdrag saamstel, want ’n pad wat vir die administrateur korrek is, is nie outomaties korrek vir die oordraggebruiker nie. Daardie verskil is die bron van die meeste toestemmingsfoute wat soos netwerkfoute lyk.
Vra die bediener vir sy eie beskouing: ssh [email protected] pwd en ssh [email protected] ls -ld /srv/archive. As die tweede opdrag toestemming geweier rapporteer, is die tonnel reg en is die pad vir daardie rekening onbruikbaar. Maak eienaarskap reg of kies ’n ander bestemming eerder as om toestemmings te verbreed sodat die oordrag kan voortgaan.
’n Beperkte SFTP-opstelling kan ’n chroot as die wortel van die lêerstelsel voorstel. Binne daardie beskouing is ’n absolute pad absoluut binne die chroot, wat nie dieselfde plek is wat die administrateur op die gasheer sien nie.
Noem albei kante van die dubbelpunt eksplisiet
’n Oplaai moet die afstandlêernaam noem eerder as om te aanvaar dat die plaaslike basisnaam aan die ander kant aanvaarbaar sal wees.
scp q3-invoice.csv [email protected]:/home/transfer/drop/q3-invoice.csv’n Aflaai moet die plaaslike bestemming om presies dieselfde rede noem. Die twee naamruimtes is onafhanklik, en ’n skrip wat aanvaar dat hulle ooreenstem, breek die eerste keer wanneer die afstandboom ’n ander uitleg gebruik.
scp [email protected]:/srv/archive/2026-q3.csv ./2026-q3.csvVermy ~otheruser in ’n skrip wat onderhou word. Om ’n ander rekening se tuisgids uit te brei was ’n kenmerk van die afstanddop, en ’n SFTP-bediener implementeer dalk nie die uitbreiding wat dit namaak nie. Skryf die absolute pad wat die rekening werklik kan oopmaak, en sit plaaslike paaie met spasies tussen aanhalingstekens eerder as om aanhalingstekens te kopieer wat vir ’n dop op die bediener geskryf is.
Weet watter protokol jou scp werklik gebruik
Sedert OpenSSH 9.0 gebruik die kliënt standaard SFTP, en verspreidings aanvaar of voer daardie gedrag op hul eie skedule terug. Die weergawe string vertel wat die kliënt van plan is, maar ’n verskafferbou kan van die stroomop verskil, so kyk na die kliënt wat jy werklik gebruik: ssh -V.
Die twee protokolle los name anders op. Ouer SCP vra die afstandgebruiker se dop om die pad uit te brei, so wildkaarte en tildes word deur daardie dop met sy eie reëls hanteer. SFTP stuur eerder lêeroordragbewerkings, so ’n wildkaart word óf deur die kliënt uitgebrei óf glad nie uitgebrei nie. Albei reis binne SSH na dieselfde masjien, en daarom kan een gasheer onder twee kliënte anders optree.
scp -v druk die subsisteem wat dit versoek, en ’n sftp-subsisteemreël bevestig dat die moderne pad gebruik word. scp -O dwing die ou protokol waar dit ondersteun en werklik nodig is, en dit bring sy eie aanhalingreëls terug. Dit is nie ’n VPN-opsie nie, nie ’n manier om iets op die bediener te aktiveer nie, en nie ’n rede om gasheer-sleutelkontrole te verslap nie.
Toets die pad voordat die skrip daarop staatmaak
’n Paadprobleem duik op die slegste moontlike tyd op, in ’n outomatiese taak snags met niemand wat kyk nie. Bewys eers die bestemming met ’n klein lêer en die presiese rekening wat die taak gebruik, en hou daardie toetsopdrag by die taakdefinisie. As die toets ’n ander rekening of ’n ander gids nodig het, sal die taak ook een nodig hê.
Kontroleer ook die bedienerkant. grep -i subsystem /etc/ssh/sshd_config wys of ’n SFTP-subsisteem opgestel is, en sftp -b /dev/null [email protected] eindig net suksesvol wanneer daardie subsisteem antwoord. ’n Gasheer wat SSH-aanmeldings aanvaar maar geen subsisteem het nie, faal elke moderne oordrag terwyl dit in ’n aanmeldingstoets heeltemal gesond lyk.
Teken die kliëntweergawe, die protokol in gebruik en die absolute afstandpad in die taaknotas aan. Wanneer die volgende opgradering ’n verstek verander, is daardie nota die verskil tussen ’n oplossing van vyf minute en ’n middag van raai.