29Jun
Bir web geliştiricisi için çok yaygın olan bir görev, geliştirme kutunuzdaki bir alt dizinden uzaktaki bir sunucudaki aynı alt dizine tek bir dosya yüklemektir. Ne yazık ki, bu her zaman her iki sunucudaki dizinleri değiştirmeyi içeren rahatsız edici bir manuel işlem olur ve büyük bir zaman harcar.
Bu yüzden, bunu kendim için otomatikleştiren, güvenli dosya kopyalama için scp kullanarak bir kabuk komut dosyası yazmak için üzerime attım.(Önemli Not: ftp korkunç güvensiz, bunun yerine WinSCP kullanın)
Çözülmesi gereken temel sorun, geliştirme makinemdeki WordPress yüklemesinin sunucudaki kurulumdan farklı bir taban dizini olmasıydı.Geliştirme makinemde /var/ www, sunucusunda /var/www/howtogeek/docs/ gibi bir şey daha var. Bunları yalnızca betiğin başlangıcındaki değişkenlere taşımaya karar verdim:
SSHSERVER = [email protected]
RDIR = /var/www/howtogeek/ dokümanları
LDIR = '\ / var \ / www'
Yerel dizininin( LDIR) komut dosyasında her birinde \ önce / yol bulunur. Bunun nedeni, daha sonra komut dosyasında bir sed komutuna geçirileceğiz, o yüzden bu değerleri kaçmak zorundayız. Eminim bunun başka yolu vardır, fakat bundan habersizimdir.
Daha sonra, otomatik ssh oturum açma ayarlarını yaptım. Bunu yapmak için önce ssh keygen yardımcı programını şu şekilde çalıştırmalısınız:
ssh-keygen -t rsa
Sonra ~ /.ssh/ id_rsa.pub dosyasını uzak sunucudaki ~ /.ssh/ authorized_keys dosyasına kopyalamanız gerekir.~ /. ssh dizini uzaktaki sunucuda zaten oluşturulmuşsa( kontrol etmek isteyebilirsiniz), o zaman anahtarları kopyalamak için bu komutu çalıştırabilirsiniz:
cat ~ /.ssh/ id_rsa.pub |ssh kullanıcı @ ana makine adı 'kedi & gt; & gt;.ssh / authorized_keys '
Artık otomatik ssh girişleri var, ki parola olmadan scp yardımcı programını kullanmaya başlayacak.Şimdi, betiğinde kullanacağımız scp komutuna bir göz atalım:
scp $ 1 $ SSHSERVER: $ RDIR`pwd | sed "s / ${ LDIR} //" `/` echo $ 1 | sed 's /.* \ /// ``
$ 1, yüklemeye çalıştığınız dosya adına komut dosyasına ileteceğiniz parametredir.$ SSHSERVER ve $ RDIR, kullanıcı @ ana makine adını ve önceki uzaktaki yolu ayarlamak için komut dosyasının başında ayarlayacağımız değişkenlerdir.
pwd | sed ile başlayan ilk blok, geçerli dizin yolunu alır ve uzak sunucuyla eşleşmeyen yolun önceki bölümünü çıkarır, ancak yolun geri kalan bölümünü terk eder.Örneğin, /var/www/ wp-content / komutunu çalıştırdığınızda, sed bloğu, LDIR değişkenine dayalı /var/ www adresinden çıkardı, ancak / wp-content / bölümünü bırakacaktı.
İkinci blok sadece dosyanın adını almanız için komut dosyasına aktarılan dosya adının önündeki tüm yolun kaldırılmasını sağlar.
Örneğin, komut dosyasını up.sh olarak adlandırdıysanız ve yerel /var/www/ wp-içeriği /plugins/ dizininden bir dosyada çalıştırdıysanız:
up.sh myplugin.php
Bu kabuk tarafından aşağıdaki gibi genişletilmiş olurdu:
scpmyplugin.php [email protected]: /var/www/howtogeek/docs/ wp-content /plugins/ myplugin.php
Yazıya dayanarak kendi komut dosyanızı oluşturmaya çalışmak yerine, indirmeniz için sağladım. Bu şekilde özel karakterlerle çalışılmayacak herhangi bir sorun olmayacak. .. ve evet, kendisi yüklemek için betiği kullandım =)
Download geek-uploader.sh
Sadece yolunuza bir yere koyun ve istediğiniz her şeyi yazın. Ben sadece "yukarı" olarak benimki yeniden adlandırdı, bu yüzden sadece yüklemek için "up filename.txt" yazabilirsiniz. Ayrıca, onu açmayı ve komut dosyasının başındaki değişkenleri ortamınıza uyacak şekilde değiştirmeyi de unutmayın.
Bu betik, * nix kabuğu ve scp yardımcı programıyla herhangi bir şey üzerinde çalışmalıdır. Ubuntu kullanıyorum, ancak Solaris, OS X veya Windows üzerinde Cygwin yüklü olmalıdır.