scp oer SFTP: ferne paden skriuwe dy't echt oplosse
Moderne scp ferfiert fia SFTP, dus tilde-útwreiding en wildcards gedrage har oars. Skriuw eksplisite serverpaden en kies it protokol bewust.
In scp-opdracht dy't jierren yn in skript wurke, kin op in hjoeddeistige klant mislearje mei in paadflater dy't neat mei de tunnel te meitsjen hat. De VPN droech de bytes; de klant frege de server om in namme dy't de server net oplosse koe. Hjoeddeistige OpenSSH-scp ferfiert standert fia SFTP, en SFTP docht gjin shell-styl útwreiding lykas it âlde protokol die. It opdracht fan jo eigen akkount ôf nei bûten folgje lit sjen wêr't it paad echt ynterpretearre wurdt.
Begjin by it akkount, dan by de map dy't it skriuwe kin
De dûbele punt skiedt twa nammeromten, en allinnich de lofterkant heart by de masine dêr't jo op type. Alles dêrnei wurdt troch de server oplost, ûnder it akkount dêr't jo jo by autentisearre hawwe, binnen hokker bestandssysteembyld dat akkount ek hat. Befêstigje beide foardat jo de opdracht gearstalle, want in paad dat foar de behearder korrekt is, is net automatysk korrekt foar de oerdrachtbrûker. Dat ferskil is de boarne fan de measte tastimmingflaters dy't op netwurkstoarringen lykje.
Freegje de server om syn eigen byld: ssh [email protected] pwd en ssh [email protected] ls -ld /srv/archive. As de twadde opdracht tastimming wegere rapportearret, is de tunnel goed en is it paad foar dat akkount net brûkber. Reparearje it eigendom of kies in oare bestimming ynstee fan tastimmingen te ferbreedzjen sadat de oerdracht trochgean kin.
In beheinde SFTP-konfiguraasje kin in chroot as de woartel fan it bestandssysteem presintearje. Binnen dat byld is in absolút paad absolút binnen de chroot, wat net deselde lokaasje is as dy't de behearder op de host sjocht.
Neam beide kanten fan de dûbele punt eksplisyt
In upload moat de ferne bestânsnamme neame ynstee fan oan te nimmen dat de lokale basisnamme oan 'e oare kant akseptabel wêze sil.
scp q3-invoice.csv [email protected]:/home/transfer/drop/q3-invoice.csvIn download moat de lokale bestimming om krekt deselde reden neame. De twa nammeromten binne ûnôfhinklik, en in skript dat oannimt dat se oerienkomme, brekt de earste kear as de ferne beam in oare yndieling brûkt.
scp [email protected]:/srv/archive/2026-q3.csv ./2026-q3.csvMij ~otheruser yn in skript dat ûnderhâlden wurdt. It útwreidzjen fan 'e thúsmap fan in oar akkount wie in funksje fan 'e ferne shell, en in SFTP-server implementearret miskien net de útwreiding dy't dat neibeartet. Skriuw it absolute paad dat it akkount echt iepenje kin, en set lokale paden mei spaasjes tusken oanhellingstekens ynstee fan oanhellingslagen te kopiearjen dy't foar in shell op 'e server skreaun binne.
Wit hokker protokol jo scp echt brûkt
Sûnt OpenSSH 9.0 brûkt de klant standert SFTP, en distribúsjes oanfiere of backporte dat gedrach op har eigen skema. De ferzje-string fertelt wat de klant fan plan is, mar in leveransierbou kin fan upstream ferskille, dus kontrolearje de klant dy't jo echt draaie: ssh -V.
De twa protokollen oplosse nammen oars. Alde SCP freget de ferne brûkersshell om it paad út te wreidzjen, dus wildcards en tildes wurde troch dy shell mei syn eigen regels behannele. SFTP jout ynstee bestânsoerdrachtsoperaasjes út, dus in wildcard wurdt of troch de klant útwreide of hielendal net útwreide. Beide reizgje binnen SSH nei deselde masine, wêrom't ien host ûnder twa klanten oars gedrage kin.
scp -v prints it subsysteem dat it oanfreget, en in sftp-subsysteemrigel befêstiget dat it moderne paad brûkt wurdt. scp -O twingt it âlde protokol wêr't it stipe en echt nedich is, en it bringt syn eigen oanhellingregels werom. It is gjin VPN-opsje, gjin manier om eat op 'e server yn te skeakeljen, en gjin reden om host-kaai-kontrôle te fersêftsjen.
Test it paad foardat it skript dêrop fertrout
In paadprobleem komt op it minst mooglike momint oan it ljocht, yn in automatisearre taak nachts sûnder dat immen sjocht. Bewiis earst de bestimming mei in lyts bestân en it krekte akkount dat de taak brûkt, en hâld dy testopdracht njonken de taakdefinysje. As de test in oar akkount of in oare map nedich hat, sil de taak dat ek nedich hawwe.
Kontrolearje ek de serverkant. grep -i subsystem /etc/ssh/sshd_config lit sjen oft in SFTP-subsysteem konfigurearre is, en sftp -b /dev/null [email protected] einiget allinnich suksesfol as dat subsysteem antwurdet. In host dy't SSH-oanmeldingen akseptearret mar gjin subsysteem hat, mislearret by elke moderne oerdracht wylst it yn in oanmeldingstest folslein sûn liket.
Skriuw de klantferzje, it brûkte protokol en it absolute ferne paad yn 'e taaknotysjes. As de folgjende upgrade in standert feroaret, is dy notysje it ferskil tusken in oplossing fan fiif minuten en in middei fan rieden.