CMD ile FTP İstemcisi Kullanımı

Windows ortamında dosya transferi söz konusu olduğunda, çoğu sysadmin aklına hemen WinSCP veya FileZilla gibi GUI tabanlı araçlar geliyor. Oysa Windows’un yerleşik FTP istemcisi, özellikle script otomasyonu ve sunucu yönetimi senaryolarında son derece güçlü bir araç. Üstelik hiçbir ek kurulum gerektirmiyor, her Windows ve Windows Server sürümünde hazır geliyor. Bu yazıda CMD üzerinden FTP istemcisini derinlemesine inceleyeceğiz, gerçek dünya senaryolarıyla pratik kullanım örnekleri paylaşacağız.

CMD FTP İstemcisine Giriş

Windows’un yerleşik ftp.exe aracı, C:WindowsSystem32ftp.exe konumunda bulunuyor. Komut satırından doğrudan ftp yazarak başlatabilirsiniz. İki temel kullanım modu var:

  • Etkileşimli mod: FTP sunucusuna bağlanıp komutları tek tek girdiğiniz mod
  • Script modu: Komutları bir dosyaya yazıp otomatik çalıştırdığınız mod

Sysadmin olarak en çok işinize yarayacak olan ikinci mod, yani script modu. Gece yarısı backup dosyalarını otomatik transfer eden, log dosyalarını merkezi sunucuya gönderen scriptler yazmak için birebir.

FTP İstemcisini Başlatma

# Basit bağlantı
ftp ftp.sunucu.com

# IP adresiyle bağlantı
ftp 192.168.1.100

# Belirli port ile bağlantı
ftp -n ftp.sunucu.com

# Verbose modu kapatarak bağlantı
ftp -v ftp.sunucu.com

-n parametresi otomatik girişi devre dışı bırakır, -v ise sunucudan gelen tüm yanıtları bastırır. Script yazarken -v kullanmak log dosyalarınızı temiz tutar.

Temel FTP Komutları

FTP oturumu açtıktan sonra kullanabileceğiniz komutları bilmek, işlerin ne kadar hızlı ilerlediğini doğrudan etkiliyor. Aşağıda en sık kullanılan komutları açıkladım.

Bağlantı ve Kimlik Doğrulama

ftp> open ftp.ornek.com
ftp> user kullanici_adi
ftp> password: ****

Bağlantı kurulduktan sonra open komutuyla farklı bir sunucuya geçiş yapabilirsiniz. user komutu kullanıcı adı ve şifre girmenizi sağlar.

Dizin İşlemleri

# Uzak sunucudaki mevcut dizini göster
ftp> pwd

# Uzak sunucudaki dosyaları listele
ftp> ls
ftp> dir

# Uzak sunucuda dizin değiştir
ftp> cd /backup/2024

# Yerel makinede dizin değiştir
ftp> lcd C:LocalBackup

# Uzak sunucuda yeni klasör oluştur
ftp> mkdir yeni_klasor

# Uzak sunucuda klasör sil
ftp> rmdir eski_klasor

lcd komutunu çoğu kişi atlıyor ama son derece kritik. Uzak dizin için cd, yerel dizin için lcd kullanıyorsunuz. Bunu karıştırırsanız dosyalar yanlış yere gidiyor.

Dosya Transfer Komutları

# Tek dosya indir
ftp> get rapor.txt

# Tek dosya indir ve farklı isimle kaydet
ftp> get rapor.txt C:Downloadsgunluk_rapor.txt

# Çoklu dosya indir (wildcard ile)
ftp> mget *.log

# Tek dosya yükle
ftp> put backup.zip

# Çoklu dosya yükle
ftp> mput *.csv

# İkili transfer modu (binary dosyalar için zorunlu)
ftp> binary

# ASCII transfer modu (metin dosyaları için)
ftp> ascii

Binary ve ASCII mod farkı kritik! ZIP, EXE, görüntü dosyaları gibi ikili dosyaları transfer ederken mutlaka binary moduna geçin. ASCII modda ikili dosya transferi yaparsanız dosya bozulur. Bu basit hatayı yüzlerce kez gördüm, deneyimli adminler bile zaman zaman düşüyor.

Diğer Kullanışlı Komutlar

# Dosya boyutunu göster
ftp> size buyuk_dosya.zip

# Uzak sunucudan dosya sil
ftp> delete eski_log.txt

# Uzak sunucuda dosya yeniden adlandır
ftp> rename eski_isim.txt yeni_isim.txt

# Bağlantıyı kapat ama FTP istemcisinden çıkma
ftp> close

# FTP istemcisinden tamamen çık
ftp> quit
ftp> bye

Script Modunda FTP Kullanımı

İşte gerçek güç burada. FTP komutlarını bir metin dosyasına yazıp -s parametresiyle çalıştırdığınızda, tamamen otomatik transfer scriptleri oluşturabiliyorsunuz.

Basit FTP Script Örneği

Önce bir script dosyası oluşturun, örneğin ftp_script.txt:

open ftp.sunucu.com
kullanici
sifre123
binary
cd /uploads
put C:Backupgunluk_backup.zip
quit

Sonra bu scripti CMD’den çalıştırın:

ftp -n -s:ftp_script.txt

-n parametresi otomatik girişi devre dışı bıraktığı için script içindeki kimlik bilgileri devreye giriyor.

Gerçek Dünya Senaryosu 1: Günlük Backup Transferi

Diyelim ki her gece bir uygulama sunucusundan backup dosyalarını merkezi FTP sunucusuna göndermek istiyorsunuz. Şöyle bir batch script yazabilirsiniz:

@echo off
SET TARIH=%date:~10,4%%date:~7,2%%date:~4,2%
SET BACKUP_DOSYA=backup_%TARIH%.zip
SET LOG_DOSYA=C:Logsftp_transfer_%TARIH%.log

echo FTP Transfer Basliyor: %TARIH% >> %LOG_DOSYA%
echo Tarih: %date% Saat: %time% >> %LOG_DOSYA%

:: FTP script dosyasini dinamik olarak olustur
echo open 192.168.10.50 > ftp_gecici.txt
echo ftpkullanici >> ftp_gecici.txt
echo GucluSifre2024! >> ftp_gecici.txt
echo binary >> ftp_gecici.txt
echo cd /gunluk_backup >> ftp_gecici.txt
echo put C:Backup%BACKUP_DOSYA% >> ftp_gecici.txt
echo quit >> ftp_gecici.txt

:: FTP transferini calistir
ftp -n -s:ftp_gecici.txt >> %LOG_DOSYA% 2>&1

:: Gecici script dosyasini temizle
del ftp_gecici.txt

:: Transfer basarisini kontrol et
IF %ERRORLEVEL% EQU 0 (
    echo Transfer BASARILI: %BACKUP_DOSYA% >> %LOG_DOSYA%
) ELSE (
    echo Transfer BASARISIZ! Hata kodu: %ERRORLEVEL% >> %LOG_DOSYA%
)

echo Transfer tamamlandi: %time% >> %LOG_DOSYA%

Bu scripti Task Scheduler ile her gece saat 02:00’de çalıştırabilirsiniz. Hem transfer işlemi otomatikleşiyor hem de log kaydı tutuyorsunuz.

Gerçek Dünya Senaryosu 2: Sunucudan Dosya Çekme

Web sunucularından log dosyalarını merkezi analiz sistemine çekmek çok yaygın bir senaryo. Şöyle bir script işinizi görür:

@echo off
SET SUNUCU=192.168.1.200
SET HEDEF_KLASOR=C:LogAnaliz%date:~10,4%%date:~7,2%%date:~4,2%

:: Hedef klasoru olustur
IF NOT EXIST %HEDEF_KLASOR% mkdir %HEDEF_KLASOR%

:: FTP ile log dosyalarini cek
echo open %SUNUCU% > ftp_log_cek.txt
echo logadmin >> ftp_log_cek.txt
echo LogSifre99 >> ftp_log_cek.txt
echo ascii >> ftp_log_cek.txt
echo cd /var/log/apache2 >> ftp_log_cek.txt
echo lcd %HEDEF_KLASOR% >> ftp_log_cek.txt
echo mget access_*.log >> ftp_log_cek.txt
echo mget error_*.log >> ftp_log_cek.txt
echo quit >> ftp_log_cek.txt

ftp -n -s:ftp_log_cek.txt

del ftp_log_cek.txt

echo Log dosyalari %HEDEF_KLASOR% klasorune aktarildi.

Pasif Mod ve Güvenlik Duvarı Sorunları

Modern ağ ortamlarında FTP’nin en büyük baş ağrısı güvenlik duvarı sorunları. Windows’un yerleşik FTP istemcisi aktif mod kullanır, bu da güvenlik duvarı arkasındaki sunucularda sorun çıkarabilir.

# Pasif modu aktifleştir (FTP oturumu içinde)
ftp> passive

# Durumu kontrol et
ftp> passive
Passive mode On.

Pasif modu script içinde de kullanabilirsiniz:

open ftp.sunucu.com
kullanici
sifre
passive
binary
cd /data
get buyuk_dosya.iso
quit

Güvenlik duvarı arkasındaki FTP sunucularına bağlanamıyorsanız ilk denemeniz bu olsun.

İleri Seviye Kullanım Teknikleri

Çoklu Dosya Transferinde Etkileşimi Kapatma

mget ve mput komutları varsayılan olarak her dosya için onay ister. Script modunda bu işlemi kapatmak gerekiyor:

open ftp.sunucu.com
kullanici
sifre
prompt off
binary
mget *.zip
mput *.csv
quit

prompt off komutu olmadan mget/mput kullandığınızda script ilk dosyada takılır. Bu hatayı ilk kez yaşadığınızda saatlerce script hatasını aramaya başlarsınız, oysa çözüm tek satır.

Bağlantı Hata Yönetimi

@echo off
ftp -n -s:transfer_script.txt
IF %ERRORLEVEL% NEQ 0 (
    echo HATA: FTP transferi basarisiz oldu. >> C:Logshata.log
    echo Tarih: %date% Saat: %time% >> C:Logshata.log
    :: Mail gondermek veya baska uyari sistemi cagirmak icin buraya ekleyin
    exit /b 1
)
echo Transfer basarili tamamlandi.
exit /b 0

Gerçek Dünya Senaryosu 3: Çoklu Sunucu Backup Toplama

Birden fazla sunucudan backup dosyası toplamak zorunda kaldığınızda döngü kullanabilirsiniz:

@echo off
SET TARIH=%date:~10,4%%date:~7,2%%date:~4,2%
SET HEDEF=C:CentralBackup%TARIH%

IF NOT EXIST %HEDEF% mkdir %HEDEF%

:: Sunucu listesi
FOR %%S IN (192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13) DO (
    echo Sunucu %%S icin transfer basliyor...
    
    echo open %%S > temp_ftp.txt
    echo backupuser >> temp_ftp.txt
    echo BackupPass2024 >> temp_ftp.txt
    echo binary >> temp_ftp.txt
    echo prompt off >> temp_ftp.txt
    echo lcd %HEDEF% >> temp_ftp.txt
    echo cd /backup >> temp_ftp.txt
    echo mget *.bak >> temp_ftp.txt
    echo quit >> temp_ftp.txt
    
    ftp -n -s:temp_ftp.txt
    
    IF %ERRORLEVEL% EQU 0 (
        echo Sunucu %%S: Basarili >> %HEDEF%transfer_raporu.txt
    ) ELSE (
        echo Sunucu %%S: BASARISIZ >> %HEDEF%transfer_raporu.txt
    )
    
    del temp_ftp.txt
)

echo Tum transferler tamamlandi.

Güvenlik Konuları

FTP’nin güvenlik açısından zayıf noktaları var, bunları bilmek önemli.

Dikkat Edilmesi Gereken Noktalar

  • Şifreler düz metin: FTP protokolü şifreleri şifrelemeden gönderiyor. Kurumsal ortamda mümkünse FTPS veya SFTP’ye geçin
  • Script dosyaları: Şifre içeren script dosyalarını dikkatli yönetin, ACL ile koruyun
  • Log dosyaları: FTP transferleri Windows Event Log’a düşebilir, şifre içerip içermediğini kontrol edin
  • Güvenlik duvarı kuralları: FTP için 21. port ve veri kanalı portlarını (pasif modda dinamik) açmanız gerekiyor

Script Dosyalarını Koruma

:: Scripti sadece SYSTEM ve Administrators okuyabilsin
icacls ftp_script.txt /inheritance:r /grant:r "SYSTEM:(R)" /grant:r "Administrators:(R)"

:: Transferden sonra hemen sil
del /f /q ftp_script.txt

FTP İstemcisi Parametreleri Özeti

Sık kullandığınız parametreleri aşağıda bulabilirsiniz:

  • -v: Verbose modu kapatır, sunucu yanıtları ekrana basılmaz
  • -n: Oturum açıldığında otomatik girişi engeller
  • -i: Çoklu dosya transferlerinde etkileşimi kapatır (mget/mput için)
  • -d: Debug modunu açar, bağlantı sorunlarında işe yarar
  • -g: Wildcard (joker karakter) kullanımını devre dışı bırakır
  • -s:dosyaadi: Belirtilen script dosyasını çalıştırır
  • -a: Veri bağlantısı için herhangi bir yerel adresi kullanır
  • -w:tamponboyutu: Transfer tampon boyutunu ayarlar (büyük dosyalar için artırın)

Sorun Giderme

Yaygın Hatalar ve Çözümleri

Bağlantı zaman aşımı hatası: Güvenlik duvarı engelliyor olabilir. Telnet ile 21. portu test edin:

telnet ftp.sunucu.com 21

Transfer tamamlanıyor ama dosya bozuk: Binary/ASCII mod uyuşmazlığı. Her ikili dosya için binary komutunu kullandığınızdan emin olun.

Kimlik doğrulama hatası script modunda: -n parametresini kullandığınızdan emin olun, yoksa otomatik giriş script kimlik bilgilerini eziyor.

mget wildcard çalışmıyor: -g parametresi wildcard’ı engelliyor olabilir. Ayrıca bazı FTP sunucuları joker karakteri desteklemez.

:: Debug modu ile bağlantıyı incele
ftp -d -n -s:script.txt > debug_output.txt 2>&1

Debug modunda (-d) tüm gönderilen ve alınan komutlar görünüyor, sorun tespiti çok kolaylaşıyor.

Büyük Dosyalar için Tampon Boyutu Optimizasyonu

:: 65536 byte tampon boyutu ile transfer (varsayilan 4096)
ftp -w:65536 -n -s:buyuk_dosya_script.txt

Büyük dosyaları transfer ediyorsanız ve hız sorunu yaşıyorsanız -w parametresiyle tampon boyutunu artırın. Gece yarısı 50 GB backup dosyası transferinde bu fark ciddi zaman tasarrufu sağlıyor.

Task Scheduler ile Otomatizasyon

Script hazır, şimdi bunu zamanlanmış görev olarak ayarlayalım:

:: Gunluk saat 02:00'de calisacak gorev olustur
schtasks /create /tn "FTP Backup Transfer" /tr "C:Scriptsftp_backup.bat" /sc daily /st 02:00 /ru SYSTEM /f

:: Gorevi kontrol et
schtasks /query /tn "FTP Backup Transfer"

:: Manuel calistir
schtasks /run /tn "FTP Backup Transfer"

:: Gorevi sil
schtasks /delete /tn "FTP Backup Transfer" /f

SYSTEM hesabıyla çalıştırdığınızda, kullanıcı oturumu açık olmasa bile görev çalışır. Bu özellikle gece yarısı transferleri için kritik.

PowerShell ile Entegrasyon

CMD FTP istemcisi işlevsel ama PowerShell ile birleştirince çok daha güçlü hale geliyor:

@echo off
:: Onceki gun backup dosyasinin var olup olmadigini kontrol et
powershell -Command "if (!(Test-Path 'C:Backupbackup_%date:~10,4%%date:~7,2%%date:~4,2%.zip')) { exit 1 }"

IF %ERRORLEVEL% NEQ 0 (
    echo HATA: Backup dosyasi bulunamadi, transfer iptal edildi. >> C:Logsftp.log
    exit /b 1
)

:: Dosya mevcutsa transferi baslat
ftp -n -s:ftp_script.txt >> C:Logsftp.log 2>&1

Bu şekilde boş transfer denemeleri önleniyor, sadece gerçekten backup dosyası varsa FTP bağlantısı kuruluyor.

Sonuç

CMD FTP istemcisi, göründüğünden çok daha güçlü bir araç. Özellikle legacy sistemlerle çalışırken, ek yazılım kurulumuna izin verilmeyen kısıtlı ortamlarda ve basit otomasyon ihtiyaçlarında birebir çözüm sunuyor. Script modu, Task Scheduler entegrasyonu ve hata yönetimiyle birleştirince production ortamında güvenle kullanılabilecek transfer çözümleri oluşturabiliyorsunuz.

Tabii ki FTP’nin güvenlik sınırlamaları var. Mümkün olan her durumda FTPS veya SFTP tercih edin. Ama bunları kullanamadığınız ortamlarda CMD FTP istemcisi, iş gören ve güvenilir bir alternatif olmaya devam ediyor. Binary/ASCII mod dikkatine, prompt off kullanımına ve script dosyalarının güvenliğine dikkat ettiğiniz sürece sorunsuz çalışır.

En kritik tavsiyem: Production ortamına almadan önce scriptleri mutlaka test ortamında deneyin ve her transferin sonucunu loglayın. Gece yarısı çalışan ve kimsenin fark etmeden haftalar boyunca başarısız olan bir backup transferi, gerçekten ihtiyaç duyduğunuzda sizi çok zor durumda bırakabilir.

Yorum yapın