Bir web geliştiricisi için çok yaygın bir görev, geliştirme kutunuzdaki bir alt dizinden, uzak bir sunucudaki aynı alt dizine tek bir dosya yüklüyor. Ne yazık ki, bu her zaman her iki sunucuda anahtarlama dizinlerini içeren can sıkıcı bir manuel süreç olmaktan çıkıyor ve çok fazla zaman harcıyor.

Bu yüzden, benim için otomatik olarak güvenli dosya kopyalama için scp kullanarak bir kabuk komut dosyası yazdım. (Önemli Yan Not: ftp korkunç güvensizdir, yerine WinSCP kullanın)

Çözülmesi gereken asıl sorun, WordPress'in benim geliştirme makinemdeki kurulumunun sunucumdaki kurulumdan farklı bir temel dizine sahip olmasıydı. Geliştirme makinemde / var / www ve sunucumda / var / www / howtogeek / docs / gibi bir şey var. Bunları betiğin başlangıcında değişkenlere aktarmaya karar verdim, şöyle ki:

[email protected] RDIR=/var/www/howtogeek/docs LDIR=’/var/www’

Komut dosyasındaki yerel dizinin (LDIR) her bir / yolundan önce bir 'olduğunu unutmayın. Bunun nedeni, bunu senaryoda daha sonra bir sed komutuna geçireceğimiz için, bu değerlerden kurtulmak zorundayız. Eminim bunun için başka bir yol var, ama bunun farkında değilim.

Ardından, otomatik ssh girişlerini kurdum. Bunu yapmak için, önce ssh keygen yardımcı programını çalıştırmanız gerekir:

ssh-keygen -t rsa

Sonra ~ / .ssh / id_rsa.pub dosyasını uzak sunucudaki ~ / .ssh / authorized_keys dosyasına kopyalamanız gerekir. ~ / .Ssh dizini, uzak sunucuda zaten oluşturulmuşsa (kontrol etmek isteyebilir), bu tuşların üzerine kopyalamak için şu komutu çalıştırabilirsiniz:

cat ~/.ssh/id_rsa.pub | ssh [email protected] ‘cat >> .ssh/authorized_keys’

Artık, scp yardımcı programının bir şifre olmadan kullanılmasına olanak tanıyan otomatik ssh girişleri var. Şimdi senaryoda kullanacağımız scp komutuna bir bakalım:

scp $1 $SSHSERVER:$RDIR`pwd|sed “s/${LDIR}//”`/`echo $1|sed ‘s/.*///’`

$ 1, yüklemeye çalıştığınız dosya adı için komut dosyasına ileteceğiniz parametredir. $ SSHSERVER ve $ RDIR, user @ hostname ve önceki uzak 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 uyuşmayan yolun önceki bölümlerini keser, ancak yolun kalanını bırakır. Örneğin, komutu çalıştırdığınızda / var / www / wp-content / dizinindeyseniz, sed bloğu, LDIR değişkenimize dayanarak / var / www'yi kapatacaktı, ancak / wp-content / bölümünü bırakacaktı. .

İkinci blok, sadece dosya ismini alabilmeniz için, komut dosyasının sonuna yazılan dosya isminden önceki yolun tamamını kapattığınızdan emin olur.

Örneğin, betiği up.sh olarak adlandırdıysanız ve bir dosyadaki yerel / var / www / wp-content / plugins / dizininden çalıştırdıysanız:

up.sh myplugin.php

Bu kabuk tarafından aşağıdaki gibi genişletilebilirdi:

scp myplugin.php [email protected]:/var/www/howtogeek/docs/wp-content/plugins/myplugin.php

Makaleye dayanarak kendi komut dosyası dosyanızı oluşturmaya çalışmak yerine, indirmenizi sağladım. Bu şekilde özel karakterlerle çalışmayan herhangi bir sorun olmayacaktır… ve evet, kendimi yüklemek için betiği kullandım =)

İndir geek-uploader.sh

Sadece yolun içinde bir yere koy ve istediğini söyle. Ben sadece "yukarı" için benim adını değiştirdim, bu yüzden yüklemek için "filename.txt" yazabilirim. Ayrıca, açmayı ve ortamın eşleşmesi için komut dosyasının başında bulunan değişkenleri değiştirmeyi de unutmayın.

Bu betik * nix kabuğu ve scp yardımcı programı ile herhangi bir şey üzerinde çalışmalıdır. Ubuntu kullanıyorum, ancak Solaris, OS X, hatta Cygwin yüklü Windows'ta çalışmalı.

En İpuçları:
Yorumlar: