SFTP Nedir ? Windows Üzerinde SFTP Sunucu Kurulumu

SFTP Nedir?

Secure FTP (Güvenli Dosya Taşıma Protokolü), yani SFTP, SSH kullanarak dosya transferi yapan bir dosya aktarım protokolüdür. SSH’ın sağladığı güvenlik özellikleri, FTP’den farklı olarak SFTP’yi güvenli hale getirir.FTP’nin RSA ile güçlendirilmiş halidir. TCP üzerinden çalışır.

SSH ile SFTP Kullanımı

SFTP ile dosya transferi yapabilmek için bir SFTP istemcisine sahip olmak gereklidir. Neredeyse bütün Linux dağıtımlarında bir SFTP istemcisi ön tanımlı olarak bulunur. Windows işletim sistemlerinde bir SFTP istemcisi edinerek kurmak gerekir.
SFTP Yazılımları
SFTP İstemcisi

OpenSSH ile birlikte gelen SFTP ( Secure file transfer program), bu protokolün istemci kısmını gerçekleştiren bir konsol (uçbirim) uygulamasıdır.

scp’nin de bazı uygulamaları gerçekte dosya transferi yapmak için SFTP kullanırlar. Zaten bu uygulamalar da eğer sunucu SFTP servisi sağlamıyorsa, en son çare olarak scp kullanırlar.

SFTP Sunucusu

Unix ve Windows işletim sistemleri için çok sayıda SFTP sunucu uygulaması mevcuttur. Özel SFTP sunucu uygulamaları da vardır, ancak en yaygın olarak bilinen OpenSSH’tır. Ön tanımlı olarak 22. portu kullanırlar.

SFTP Vekil Sunucusu

İnternet dünyasında güvenli araçlarla SFTP transferi yapmak zor bir iştir. FTP işlemlerini loglamak için kullanılan standart araçlar mevcuttur. Bunlardan bazıları; TIS fwtk ya da SUSE FTP vekil sunucularıdır. Ancak SFTP şifrelidir, geleneksel vekil sunucularla SFTP trafiğini kontrol etmek pek başarılı bir yöntem değildir.

SFTP kontrol özellikleri barındıran SSH için, man-in-the middle attack (ortadaki kişi saldırısı) yapmaya yarayan bazı araçlar mevcuttur. Bu araçlar kablodan geçen gerçek verileri ya da SFTP ile yapılan işlemleri loglayabilen fonskiyonlar içerirler.

SFTP Komutları

ile bağlantı kurma: $sftp _adi
Oturum açma: $sftp kullanici_adi@host_adi

help: Yardım komutudur. sftp ile kullanılabilecek komutların ve bu komutların işlevlerinin listesini verir.
put: Host bilgisayara dosya kopyalar.

sftp> put kaynak_dosya_konumu (hedef_konum)

get: Host bilgisayardan istemci bilgisayara dosya kopyalar.

sftp> get kaynak_dosya_konumu (hedef_konum)

cd: Host bilgisayarda dizin değiştirme komutu. (Linux işletim sistemindeki cd komutunun aynısı.)
lcd: İstemci bilgisayarda dizin değiştirme komutu.
rm: Host bilgisayarda dosya silme.
rmdir: Host bilgisayarda dizin silme.
chmod: Dosyalara ait kullanıcı izinlerini değiştirmenizi sağlar.

sftp> chmod izin_kodu dosya_konumu

ls: Host bilgisayarda dizin içeriğini listeleme.
lls: İstemci bilgisayarda dizin içeriğini listeleme.
rename: Host bilgisayarda dosya adı değiştirme.

sftp> rename eski_isim yeni_isim

mkdir: Host bilgisayarda dizin oluşturma.
lmkdir: İstemci bilgisayada dizin oluşturma.

Oturum kapatma ve SFTP’den çıkma:sftp> exit sftp> quit sftp>

Windows’ta SFTP Sunucu Kurulumu

Unix tabanlı işletim sistemlerinde genellikle SSH kurulu olur. Ancak, Windows sistemlerini SFTP server olarak kullanabilmek için sonradan kurulum yapmamız gerekmektedir. Bunun için “Open SSH for Windows” isimli özgür yazılımdan yararlanılabilir.

İndir

Bağlantı çalışmıyorsa

İndir

1.bağlantı direk adrestir 2.bağlantı ise birincisi sorunlu olursa diye ekledim 2. bağlantıda siz kendiniz bağlantı içinde bulup indirin dosyayı.Kurulum yönergelerini anlatmadım normal progam kurulumu gib kuruyoruz.

OpenSSH, bir Windows Service olarak çalışır. SFTP işlemini gerçekleştirecek kullanıcı hesapları için Windows’un yerel yada etki alanı kullanıcılarına ihtiyaç duyar. Bunun anlamı, standart FTP Server programlarında olduğu gibi bir FTP hesabı açmak yerine önce Windows’ta bir kullanıcı hesabı oluşturulur ve bu hesap OpenSSH ile ilişkilendirilir.

1.1. Open SSH Konfigirasyonu

OpenSSH’ın web sitesinden son versiyonu indirip kurun.

Önemli : OpenSSH’ın doğru çalışabilmesi için kurulumdan sonra grup ve parola dosyalarının oluşturulması gerekmektedir. Bunun için gerekli komut dosyalarının varsayılan yolu : “c:\program files\openssh\bin”.

1. Önce bir grup dosyası oluşturulması gerekir. Bunun için; Command Prompt’u açıp aşağıdaki komut çalıştırılır.
C:\program files\openssh\bin \mkgroup.exe -l >> ..\etc\group
Bu, İşletim sistemindeki kullanıcı gruplarıyla ilişkili bir dosya oluşturur.

2. İkinci işlemimiz bir parola dosyası oluşturmak. Bunun içinde aşağıdaki komutu çalıştırmalıyız.
C:\program files\openssh\bin \mkpasswd -l -u username >> ..\etc\passwd
Bu komutta username yerine SFTP Server için kullanacağımız bir yerel kullanıcı hesabının adı yazılması gerekmektedir.

3. Windows Services’tan OpenSSH isimli Windows servisi başlattığımızda Windows işletim sistemimiz bir SFTP hizmeti vermeye hazır halde olacaktır.

1.2. İnce Ayarlar

Yukarıdaki yönergeleri uyguladığımızda Bir SFTP istemci programı ile SFTP protokolünü kullanarak dosya alış verişi yapabiliriz. Ancak, SFTP işleminde kullanılan hesap bir Windows yerel kullanıcı hesabı olduğu için, varsayılan ayarlar ile oluşturulan bir kullanıcı hesabı önemli güvenlik açıkları oluşturacaktır.

Bir Windows yerel kullanıcı hesabı oluşturduğunuzda , kullanıcının ait olduğu varsayılan grup “User” grubudur, varsayılan dosya yolu ise C:\Documents and Settings\username şeklindedir. SFTP istemci programı ile bağlandığınızda da varsayılan dizin bu dizin olacaktır. Ve kullanıcı User gurubuna dahil olduğundan dizinler ve hatta sürücüler arasında gezebilecek, her işlemi gerçekleştirebilecektir.

Bunu önlemek için önce kullanıcıyı User gurubundan çıkarmalı, daha sonra kullanıcının varsayılan dosya yolunun değiştirmeliyiz. Kullanıcı bir dizine hapsetmek için ise NTFS dosya izinlerinden yararlanacağız.

Windows yerel kullanıcısı dizine hapsetmek için ise şu adımlar uygulanmalırıdır.

1. Yerel kullanıcıyı User gurundan çıkarın : Bilgisayarım’a sağ tıklayın, Yönet komutunu verin. Bilgisayar Yönetimi penceresinde bulunan ağaç menüden Yerel kullanıcı ve gruplar’ı açık. Kullacılar’a tıklayın. Yerel kullanıcının üzerine sağ tıklayın. Özelliklere girin. Gruplar sekmesinden User gurubunu kaldırın ve Tamam tuşuna basın.

2. Yerel Windows kullanıcısının varsayılan dosya yolunu değiştirin : Komut satırında aşağıdaki komutu çalıştırın.
C:\> net user username /HOMEDIR:D:\test4sftp

3. Kullanıcıyı dizine hapsedin :

a. Tüm sürücülerde uygulanmak üzere, sürücü’ye sağ tıklayın ve özellikler’e girin. Güvenlik sekmesinde Grup yada kullanıcı adları penceresine ilgili kullanıcıyı ekleyin. İzinler kısmında Tüm haklar için Deny’i işaretleyin.

b. SFTP işlemleri için ayrılan dizine sağ tıklayın ve özellikler’e girin. Güvenlik sekmesinde Grup yada kullanıcı adları penceresine ilgili kullanıcıyı ekleyin. İzinler kısmında Tüm haklar için Allow’u işaretleyin.

Dikkat : Bu işlemleri yaptıktan sonra, İnce Ayarlar isimli bölümdeki bahsi geçen mkgroup ve mkpasswd komutları yeniden çalıştırılmalı ve OpenSSH isimli Windows Service’i yeniden başlatılmalıdır.

Bir SFTP istemci programı ile SFTP hizmeti veren sunucumuza bağlanıp testlerinizi gerçekleştirebilirsiniz. Bunun için FileZilla yada WinSCP gibi özgür yazılımlar kullanabilirsiniz. 22 nolu portu kullanacağınızı unutmayın !
2. Kod tabanlı SFTP istemci işlemleri

Geliştirdiğiniz bir uygulamada SFTP işlemlerini yapmanız gerekiyorsa piyasada bunu yapan ücretli bileşenler bulmanız mümkün. Ancak bunu özgür yazılımlar yardımı ile de yapabilirsiniz. Doğal olarak ücretli bileşenler kadar basit ve pratik olmasada en azından temel dosya aktarım işlemlerini gerçekleştirebilirsiniz.

Bunun için PuTTY isimli bir özgür yazılım kullanacağız. PuTTY, Windows için bir telnet ve SSH istemcisidir. Bu yazılım SFTP işlemlerini komut satırından verilen argümanlar ile gerçekleştirmektedir. Bu dökümanda geliştirdiğimiz çözüm için PSCP ve PSFTP isimli iki exe dosyasını kullanacağız. Bu dosyaları indirebileceğiniz adresleri dökümanın sonunda bulunan bağlantılar kısmında bulabilirsiniz.

PSCP.exe : Dizin listeleme, dosya yükleme ve indirme işlemleri,

PSFTP.exe : Dosya silme işlemi, için kullanıyor olacağız.
2.1. Komut Desenleri

Dizin Listeleme :

 pscp.exe -l username -pw password -ls username@sftp.address.com:/
    Dosya indirme :
    pscp.exe -l username -pw password username@sftp.address.com:/remoteFilePath localFilePath
    Dosya yükleme :
    pscp.exe -l username -pw password localFilePath username@sftp.address.com:/remoteFilePath
    Dosya silme :
    psftp.exe username@sftp.address.com -pw password -b batchfile.txt
    bactfile.txt content : del remoteFilePath,

2.2. Örnek Kod Parçaları
2.2.1. Dizin Listeleme

string username = "testuser";
 
string password = "testpass";
 
string server = "127.0.0.1";
 
string commandFilePath = @"C:\pscp.exe";
 
string commandPatern = "-l {0} -pw {1} -ls {0}@{2}:/";
 
string commandLine = string.Format(
 
commandPatern,
 
username,
 
password,
 
server
 
);
 
Process process = new Process();
 
process.StartInfo.FileName = commandFilePath;
 
process.StartInfo.Arguments = commandLine;
 
process.StartInfo.RedirectStandardOutput = true;
 
process.StartInfo.UseShellExecute = false;
 
process.Start();
 
string standartOutput = process.StandardOutput.ReadToEnd();
 
process.Close();
 
string[] lines;
 
lines = standartOutput.Split(
 
Environment.NewLine.ToCharArray(),
 
StringSplitOptions.RemoveEmptyEntries
 
);
 
StringBuilder sb = new StringBuilder();
 
foreach(string line in lines)
 
{
 
if(line.Substring(0,1) == "-")
 
{
 
string remoteFileName = line.Substring(56);
 
sb.AppendFormat("{0}\r\n",remoteFileName);
 
}
 
}
 
MessageBox.Show(sb.ToString());

2.2.2. Dosya İndirme

string username = "testuser";
 
string password = "testpass";
 
string server = "127.0.0.1";
 
string remoteFilePath = "test.txt";
 
string localFilePath = @"C:\test.txt";
 
string commandFilePath = @"C:\pscp.exe";
 
string commandPatern = "-l {0} -pw {1} {0}@{2}:/{3} {4}";
 
string commandLine = string.Format(
 
commandPatern,
 
"testuser",
 
"testpass",
 
"127.0.0.1",
 
remoteFilePath,
 
localFilePath
 
);
 
Process process = new Process();
 
process.StartInfo.FileName = commandFilePath;
 
process.StartInfo.Arguments = commandLine;
 
process.StartInfo.RedirectStandardOutput = true;
 
process.StartInfo.UseShellExecute = false;
 
process.Start();
 
string standartOutput = process.StandardOutput.ReadToEnd();
 
process.Close();
 
if (standartOutput.Contains("100%") == true)
 
{
 
MessageBox.Show("Dosya başarıyla indirildi.");
 
}
 
else
 
{
 
MessageBox.Show("Dosya indirme işlemi başarısız.");
 
}

2.2.3. Dosya Yükleme

string username = "testuser";
 
string password = "testpass";
 
string server = "127.0.0.1";
 
string localFilePath = @"C:\test.txt";
 
string remoteFilePath = "test.txt";
 
string commandFilePath = @"C:\pscp.exe";
 
string commandPatern = "-l {0} -pw {1} {3} {0}@{2}:/{4}";
 
string commandLine = string.Format(
 
commandPatern,
 
"testuser",
 
"testpass",
 
"127.0.0.1",
 
localFilePath,
 
remoteFilePath
 
);
 
Process process = new Process();
 
process.StartInfo.FileName = commandFilePath;
 
process.StartInfo.Arguments = commandLine;
 
process.StartInfo.RedirectStandardOutput = true;
 
process.StartInfo.UseShellExecute = false;
 
process.Start();
 
string standartOutput = process.StandardOutput.ReadToEnd();
 
process.Close();
 
if (standartOutput.Contains("100%") == true)
 
{
 
MessageBox.Show("Dosya başarıyla yüklendi.");
 
}
 
else
 
{
 
MessageBox.Show("Dosya yükleme işlemi başarısız.");
 
}

2.2.4. Dosya Silme

string username = "testuser";
 
string password = "testpass";
 
string server = "127.0.0.1";
 
string localFilePath = @"C:\test.txt";
 
string remoteFilePath = "test.txt";
 
string tempFileName = string.Format("temp_{0}", remoteFilePath);
 
string tempDirectory = @"C:\temp";
 
string tempFilePath = Path.Combine(tempDirectory, tempFileName);
 
FileStream fs = new FileStream(tempFilePath, FileMode.Create);
 
System.IO.StreamWriter sw = new StreamWriter(fs);
 
sw.WriteLine(string.Format("del {0}", remoteFilePath));
 
sw.Close();
 
sw.Dispose();
 
fs.Close();
 
fs.Dispose();
 
string commandFilePath = @"C:\psftp.exe";
 
string commandPatern = "{0}@{1} -pw {2} -b {3}";
 
string commandLine = string.Format(
 
commandPatern,
 
username,
 
server,
 
password,
 
tempFilePath
 
);
 
Process process = new Process();
 
process.StartInfo.FileName = commandFilePath;
 
process.StartInfo.Arguments = commandLine;
 
process.StartInfo.RedirectStandardOutput = true;
 
process.StartInfo.UseShellExecute = false;
 
process.Start();
 
string standartOutput = process.StandardOutput.ReadToEnd();
 
process.Close();
 
if (standartOutput.Contains(": OK") == true)
 
{
 
MessageBox.Show("Dosya başarıyla silindi.");
 
}
 
else
 
{
 
MessageBox.Show("Dosya silme işlemi başarısız.");
 
}
 
System.IO.File.Delete(tempFilePath);
 
undefined undefined

Dikkat : Şimdiye kadar kullanılan komutlarda –l parametresi yerel kullanıcılar için kullanılmıştır. kullanıcıları için –d parametresi kullanılması gerekmektedir.

-Bilgisayar.com’dan Mutluluklar.

609 Responses to “SFTP Nedir ? Windows Üzerinde SFTP Sunucu Kurulumu”

Sayfalar: « 28811 10 9 8 7 6 5 4 3 2 [1] Show All

  1. 5
    Ezekiel Klehn Says:

    thanks myfriend

  2. 4
    Barry Says:

    would want to appreciate the attempts you have made in writing this post. I’m hoping the same best work from you in the future too. The truth is your creative writing capabilities has inspired me to start out my own blog now.

  3. 3
    Rocho Says:

    Mr. Krause, I’m confused. This is my first time doing this, so stick with me on this one!Everything in my ENGL444 foeldr works perfect on my computer, but when I upload it onto Filezilla some of the links and pictures don’t work. Why is that? Also, you want us to select from the left side the “exercises” foeldr and upload it. I don’t remember creating an exercises foeldr, is this something I skipped?

  4. 2
    Brenda Says:

    Steve, the whole exercises eodlfr thing is confusing to me. I figured it out, having done this stuff before, but it might trip a newer user up. I don’t understand why there needs to be an exercises eodlfr within the engl444 eodlfr; why wouldn’t the individual eodlfrs for the exercises ( starbuzz, etc.) be able to live in engl444 by themselves?Also, I tried following what you have written here with exercises, and it tripped me up with the index pages I had to create in part 2 of this exercise: there’s no exercises eodlfr mentioned there, so at first the on second index page I made the links didn’t work.

  5. 1
    hack a gmail Says:

    certainly like your website however you have to take a look at the spelling on several of your posts. Many of them are rife with spelling problems and I to find it very troublesome to inform the truth then again I will surely come again again.

Sayfalar: « 28811 10 9 8 7 6 5 4 3 2 [1] Show All

Leave a Reply

 Characters available