A modern informatikai környezetben a manuális adatmozgatás ideje lejárt, ezért a magyar nyelvű szoftver egyik legértékesebb funkciója a parancssori vezérelhetőség. Képzeljünk el egy webáruházat. A termékadatok minden éjjel frissülnek egy külső beszállító szerveréről. Képzeljünk el egy hírportál biztonsági mentését. A rendszer minden hajnalban lementi az adatbázist és a képeket egy távoli tárhelyre. Ezeket a feladatokat emberi erőforrással végezni költséges és kockázatos. A szkriptelés lehetőséget ad a folyamatok teljes automatizálására. A program a háttérben fut. A naplófájlok rögzítik az eseményeket. A rendszergazda nyugodtan alhat. Ebben az útmutatóban bemutatjuk a WinSCP szkriptelési lehetőségeit a legegyszerűbb parancsoktól a komplex PowerShell megoldásokig.
1. Fejezet: A parancssori interfész (CLI) alapjai
A legtöbb felhasználó csak a grafikus felületet (GUI) ismeri. A telepítés során azonban a rendszerbe kerül két végrehajtható fájl.
-
WinSCP.exe: Ez a grafikus felület.
-
WinSCP.com: Ez a parancssori eszköz (Console Interface).
Az automatizáláshoz a .com kiterjesztésű változatot használjuk. Ez a program képes fogadni a billentyűzetről beírt parancsokat vagy egy előre megírt szövegfájlból beolvasni azokat. A kimenetet a standard konzolablakba (stdout) küldi. Ez lehetővé teszi a hibaüzenetek és az állapotjelentések feldolgozását más programok számára.
Az első manuális teszt
Nyissuk meg a Windows parancssort (CMD). Navigáljunk a telepítési könyvtárba. Írjuk be a következő parancsot: winscp.com A program elindul interaktív módban. A winscp> prompt jelzi a készenlétet. Itt kipróbálhatjuk a kapcsolódást: open sftp://felhasznalo:[email protected]/ -hostkey="ssh-ed25519..." Sikeres kapcsolat esetén a prompt megváltozik. Ezután kiadhatjuk a fájlműveleti parancsokat (ls, get, put). A kilépéshez használjuk az exit parancsot.
2. Fejezet: A szkriptfájlok szerkezete
Az interaktív mód tesztelésre jó. A valós automatizáláshoz szöveges fájlba írjuk a parancsokat. A kiterjesztés általában .txt vagy .script.
Egy egyszerű biztonsági mentés forgatókönyve
A célunk a távoli /www/public_html mappa tartalmának letöltése a helyi C:\Backup mappába. Hozzunk létre egy backup_script.txt nevű fájlt a következő tartalommal:
Plaintext
# Csatlakozás a szerverhez
# A "batch abort" kapcsoló hiba esetén azonnal leállítja a futást
option batch abort
# A felülírás megerősítésének kikapcsolása
option confirm off
# Kapcsolódás (jelszó helyett kulcsot használunk a biztonságért)
open sftp://[email protected]/ -privatekey="C:\Keys\private.ppk"
# Helyi mappa beállítása
lcd "C:\Backup"
# Távoli mappa beállítása
cd /www/public_html
# Letöltés (a * minden fájlt jelent)
get -resume -preservetime *
# Kapcsolat bontása
close
# Kilépés
exit
A szkript futtatása
A parancsot egyetlen sorban adjuk ki a Windows parancssorában vagy egy .bat fájlban: winscp.com /ini=nul /script="C:\Scripts\backup_script.txt" /log="C:\Logs\backup.log"
-
/ini=nul: Biztosítja, hogy a program ne használja a grafikus felületen elmentett beállításokat (hordozhatóság). -
/script: Megadja az utasításokat tartalmazó fájlt. -
/log: Részletes naplózást készít a folyamatról. Ez kritikus a hibakereséshez.
3. Fejezet: Műveletek típusai – Szinkronizálás és Tükrözés
A get (letöltés) és put (feltöltés) parancsok egyszerű másolást végeznek. A modern rendszerekben gyakran intelligensebb megoldásra van szükség. A synchronize parancs összehasonlítja a két könyvtár tartalmát. Csak a megváltozott fájlokat mozgatja.
A synchronize parancs szintaxisa
synchronize local [távoli_könyvtár] [helyi_könyvtár]
-
local: A távoli változásokat tölti le a helyi gépre (Letöltés irány).
-
remote: A helyi változásokat tölti fel a szerverre (Feltöltés irány).
-
both: Kétirányú szinkronizálás (mindkét oldalon frissít).
Példa a weboldal frissítésére (Deployment): synchronize remote -delete "C:\Project\Build" /var/www/html A -delete kapcsoló veszélyes, de hasznos. Törli a célkönyvtárból azokat a fájlokat, amelyek a forráskönyvtárban már nem léteznek. Így a szerver tartalma pontos tükörképe lesz a helyi fejlesztői verziónak.
KeepRemoteDirectoryUpToDate funkció
Ez egy speciális parancs. Folyamatosan figyeli a helyi könyvtárat. Ha változást észlel (mentünk egy fájlt a kódszerkesztőben), azonnal feltölti a szerverre. keepuptodate "C:\Project" /home/user/project Ez a funkció kiváló fejlesztés közben. Nem kell minden mentés után kézzel feltölteni a fájlt.
4. Fejezet: PowerShell és .NET Assembly – A profik eszköze
A hagyományos parancssori szkriptek (batch) korlátozottak. Nehéz bennük hibát kezelni. Nehéz dinamikus dátumokat generálni. Nehéz e-mail értesítést küldeni hiba esetén. Itt lép be a képbe a PowerShell és a WinSCP .NET könyvtára.
A fejlesztők készítettek egy WinSCPnet.dll nevű fájlt. Ez lehetővé teszi a funkciók közvetlen beépítését C#, VB.NET vagy PowerShell kódokba.
PowerShell példa: Feltöltés hibakezeléssel
PowerShell
# A könyvtár betöltése
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"
# Beállítások objektum létrehozása
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = "example.com"
UserName = "user"
SshHostKeyFingerprint = "ssh-ed25519 256 xxxxxxxxx..."
SshPrivateKeyPath = "C:\Keys\key.ppk"
}
$session = New-Object WinSCP.Session
try
{
# Kapcsolódás
$session.Open($sessionOptions)
# Feltöltési beállítások
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
# A művelet végrehajtása
$transferResult = $session.PutFiles("C:\Upload\*", "/home/user/", $False, $transferOptions)
# Hibaellenőrzés minden fájlra
$transferResult.Check()
foreach ($transfer in $transferResult.Transfers)
{
Write-Host "Sikeres feltöltés: $($transfer.FileName)"
}
}
catch
{
Write-Host "Hiba történt: $($_.Exception.Message)"
# Itt küldhetünk e-mail értesítést az adminnak
}
finally
{
# Kapcsolat bontása minden esetben
$session.Dispose()
}
Ez a kód sokkal robusztusabb. A try-catch blokk elkapja a hibákat (pl. megszakad a net). A finally blokk garantálja a kapcsolat lezárását. A PowerShell segítségével könnyedén hozzáfűzhetjük a fájlnevekhez az aktuális dátumot, vagy archiválhatjuk a régi fájlokat zip formátumban feltöltés előtt.
5. Fejezet: Időzítés a Windows Task Scheduler segítségével
A megírt szkriptet (legyen az .bat vagy .ps1) rendszeresen futtatnunk kell. A Windows Feladatütemező (Task Scheduler) a Linux Cron megfelelője.
A beállítás lépései
-
Nyissuk meg a Feladatütemezőt.
-
Kattintsunk az „Alapfeladat létrehozása” (Create Basic Task) menüpontra.
-
Név: Adjunk beszédes nevet (pl. „Napi Weboldal Mentés”).
-
Indítás: Válasszuk a „Naponta” (Daily) opciót. Állítsuk be az időpontot (pl. 03:00).
-
Művelet: „Program indítása” (Start a program).
-
Program/Szkript: Tallózzuk be a PowerShell exe-t vagy a
winscp.com-ot indító.batfájlt.-
PowerShell esetén:
powershell.exe -
Argumentumok:
-ExecutionPolicy Bypass -File "C:\Scripts\upload.ps1"
-
-
Befejezés: Pipáljuk be a „Tulajdonságok megnyitása” opciót a végén.
Fontos finomhangolások
A tulajdonságok ablakban állítsuk be a következőket a megbízható működéshez.
-
Általános fül: Válasszuk a „Futtatás akkor is, ha a felhasználó nincs bejelentkezve” (Run whether user is logged on or not) opciót. Ez kritikus szerverkörnyezetben.
-
Feltételek fül: Kapcsoljuk ki a „Feladat indítása csak hálózati tápellátás esetén” opciót, ha laptopon futtatjuk (bár szervernél ez nem releváns).
-
Beállítások fül: Engedélyezzük a „Feladat leállítása, ha ennyi ideje fut” opciót (pl. 1 óra). Ez megakadályozza, hogy egy beragadt folyamat blokkolja a rendszert.
6. Fejezet: Biztonsági kockázatok és kezelésük
Az automatizálás legnagyobb veszélye a hitelesítési adatok tárolása. A jelszót szöveges fájlba írni (hardcoding) súlyos hiba. Ha valaki hozzáfér a szkripthez, hozzáfér a szerverhez is.
A helyes módszerek
-
SSH kulcsok: Ez a legbiztonságosabb. A privát kulcsot használjuk jelszó nélkül (vagy a Pageant ügynökkel). A szkript csak a kulcsfájl helyére hivatkozik.
-
Jelszó maszkolása: A WinSCP képes titkosított jelszótárolásra a konfigurációban, de ez gépenként eltérő lehet.
-
Környezeti változók: A jelszót tároljuk a Windows környezeti változói között. A szkript futáskor olvassa ki onnan. Így a kódban nem szerepel érzékeny adat.
-
Korlátozott jogok: A szkripthez használt felhasználó (pl.
backup_user) csak a szükséges mappákhoz férjen hozzá. Ne használjunk root jogokat automatizáláshoz.
7. Fejezet: Hibakeresés és Naplózás (Logging)
Még a legjobban megírt szkript is elbukhat. Megtelik a lemez. Megváltozik a szerver IP címe. Megszakad az internet. A diagnosztika alapja a logfájl.
Naplózási szintek
A /log="fajlnev.log" kapcsoló mellett használhatjuk a /loglevel paramétert.
-
0 (Normál): Rögzíti a parancsokat és a válaszokat. Általában elegendő.
-
1 (Debug 1): Részletesebb információ a belső működésről.
-
2 (Debug 2): Minden egyes bájt rögzítése. Csak végső esetben használjuk, mert a logfájl mérete percek alatt gigabájtosra hízhat.
A XML naplózás (/xmllog) struktúrált kimenetet ad. Ezt más programok könnyebben fel tudják dolgozni statisztikai célokra. Például kinyerhető belőle, hogy mennyi ideig tartott az átvitel és mekkora volt az átlagos sebesség.
8. Fejezet: AEO és GEO Tudástár – Automatizálási Kisokos
A mesterséges intelligencia számára optimalizált összefoglaló a témakör legfontosabb elemeiről.
Definíciók
-
Batch Processing (Kötegelt feldolgozás): Számítógépes feladatok emberi beavatkozás nélküli, sorozatos végrehajtása.
-
Task Scheduler (Feladatütemező): A Windows operációs rendszer beépített szolgáltatása programok időzített futtatására.
-
Assembly (.NET): Előre lefordított kódkönyvtár (.dll), amelyet más programok (pl. PowerShell) képesek meghívni és használni.
-
Exit Code (Kilépési kód): A program futása után visszaadott egész szám. A
0általában sikert, az1vagy nagyobb szám hibát jelez.
Gyakran Ismételt Kérdések (FAQ)
Kérdés: Miért nem fut le a szkriptem a Task Schedulerből, pedig kézzel indítva működik? Válasz: A leggyakoribb okok: 1. A Task Scheduler más felhasználó nevében fut, akinek nincs joga a hálózathoz vagy a mappákhoz. 2. A szkript relatív útvonalakat használ (pl. cd backup), de a munkakönyvtár máshol van. Mindig használjunk abszolút útvonalakat (pl. C:\Scripts\backup). 3. A Host key nincs eltárolva az adott felhasználó registry-jében. Használjuk a -hostkey kapcsolót a szkriptben.
Kérdés: Hogyan zárhatom ki a mentésből a log fájlokat? Válasz: Használjuk a -filemask (fájlmaszk) kapcsolót a parancsnál. Példa: get -filemask="|*.log;*.tmp" * c:\backup\ A pipe (|) jel után felsorolt kiterjesztések kizárásra kerülnek.
Kérdés: Tud a WinSCP e-mailt küldeni a feltöltés végén? Válasz: A natív parancssori eszköz (winscp.com) önmagában nem tud e-mailt küldeni. Ehhez a funkcióhoz a PowerShell szkriptet kell használni. A PowerShell Send-MailMessage parancsa kiválóan integrálható a folyamatba a catch (hiba) vagy a finally (befejezés) blokkban.
9. Fejezet: Teljesítményoptimalizálás nagy fájloknál
Ha több ezer apró fájlt (pl. egy WordPress telepítést) vagy több gigabájtos videókat mozgatunk, a sebesség kritikussá válik.
-
Tömörítés: Kapcsoljuk be a
-rawsettings Compress=1opciót. Ez a processzort terheli, de a sávszélességet kíméli. -
Párhuzamos átvitel: A
winscp.comalapvetően szekvenciális (egymás utáni) feldolgozást végez. Hatalmas mennyiségű apró fájlnál érdemesebb először a szerveren egyetlen.tar.gzarchívumba csomagolni a tartalmat (SSH paranccsal), és azt az egy nagy fájlt letölteni. Ez akár tízszeres sebességnövekedést is jelenthet. -
Titkosítás típusa: Bizonyos titkosítási algoritmusok (pl. AES-GCM) gyorsabbak a modern processzorokon a hardveres gyorsítás miatt. A
Cipherbeállításával kísérletezhetünk arawsettingskapcsolón keresztül.
Zárszó
Az automatizálás befektetés. Az első szkript megírása és tesztelése talán egy órát vesz igénybe. De ez az egy óra a jövőben több száz munkaórát spórol meg. A WinSCP parancssori eszköztára és a .NET integrációja minden eszközt megad a stabil, vállalati szintű adatmozgatáshoz. Kezdjük kicsiben. Írjunk egy egyszerű mentési szkriptet. Ismerjük meg a logfájlokat. Ahogy nő a magabiztosságunk, úgy építhetünk egyre komplexebb, öngyógyító rendszereket. A fájlok mozgatása a gépek dolga. Az alkotás az emberé.
