Tugas yang sangat umum untuk pengembang web adalah mengunggah satu file dari subdirektori di kotak pengembangan Anda ke subdirektori yang sama di server jauh. Sayangnya, ini selalu berakhir dengan proses manual menjengkelkan yang melibatkan pengalihan direktori di kedua server, dan menghabiskan banyak waktu.
Jadi, saya telah mengambil sendiri untuk menulis skrip shell untuk mengotomatisasi ini untuk saya, menggunakan scp untuk menyalin file aman. (Catatan Sisi Penting: ftp sangat tidak aman, gunakan WinSCP sebagai gantinya)
Masalah utama yang harus dipecahkan adalah bahwa instalasi WordPress saya pada mesin pengembangan saya memiliki direktori basis yang berbeda dari instalasi di server saya. Pada mesin pengembangan saya itu / var / www, dan di server saya adalah sesuatu yang lebih seperti / var / www / howtogeek / docs /. Saya memutuskan untuk memindahkannya menjadi variabel di awal skrip, seperti ini:
[email protected]
RDIR = / var / www / howtogeek / docs
LDIR = "\ / var \ / www"
Perhatikan bahwa direktori lokal (LDIR) dalam skrip memiliki \ sebelum masing-masing / di jalur. Ini karena kita akan meneruskan ini ke perintah sed nanti di skrip, jadi kita harus menghindari nilai-nilai itu. Saya yakin ada beberapa cara lain di sekitar ini, tapi saya tidak menyadarinya.
Selanjutnya, saya mengatur login ssh otomatis. Untuk melakukan ini, Anda harus terlebih dahulu menjalankan utilitas keygen ssh seperti:
ssh-keygen -t rsa
Maka Anda perlu menyalin file ~ / .ssh / id_rsa.pub ke file ~ / .ssh / authorized_keys pada server jauh. Jika direktori ~ / .ssh sudah dibuat di server jauh (mungkin ingin memeriksa), maka Anda dapat menjalankan perintah ini untuk menyalin kunci di atas:
cat ~ / .ssh / id_rsa.pub | ssh user @ hostname 'cat >> .ssh / authorized_keys'
Sekarang kita punya login ssh otomatis, yang akan memungkinkan menggunakan utilitas scp tanpa kata sandi. Sekarang mari kita lihat perintah scp yang akan kita gunakan dalam skrip:
scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed "s / $ LDIR //" '/' echo $ 1 | sed 's /.*\/// "
$ 1 adalah parameter yang akan Anda berikan kepada skrip untuk nama file yang Anda coba unggah. $ SSHSERVER dan $ RDIR adalah variabel yang akan kita atur di awal skrip untuk mengatur nama pengguna @ host dan jalur remote sebelumnya.
Blok pertama yang dimulai dengan pwd | sed mengambil jalur direktori saat ini dan strip dari bagian sebelumnya dari jalur yang tidak sesuai dengan server jauh, tetapi meninggalkan sisa jalur. Misalnya, jika Anda berada di / var / www / wp-content / ketika Anda menjalankan perintah, blok sed akan menghapus / var / www berdasarkan variabel LDIR kami, tetapi meninggalkan / wp-content / bagian dari itu .
Blok kedua hanya memastikan untuk menghapus seluruh jalur sebelumnya dari nama file yang diteruskan ke skrip sehingga Anda hanya mendapatkan nama file.
Misalnya, jika Anda menamai skrip up.sh dan menjalankannya dari direktori lokal / var / www / wp-content / plugins / pada file:
up.sh myplugin.php
Ini akan diperluas oleh shell sebagai berikut:
scp myplugin.php [email protected]: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php
Daripada mencoba membuat file skrip Anda sendiri berdasarkan artikel, saya telah menyediakannya untuk Anda unduh. Dengan begitu tidak akan ada masalah dengan karakter khusus yang tidak berfungsi ... dan ya, saya menggunakan skrip untuk mengunggah sendiri =)
Unduh geek-uploader.sh
Taruh saja di suatu tempat di jalan Anda, dan beri nama apa pun yang Anda inginkan. Saya mengganti nama saya menjadi "naik", jadi saya cukup mengetik "up filename.txt" untuk mengunggah. Juga ingat untuk membukanya dan mengubah variabel di awal skrip agar sesuai dengan lingkungan Anda.
Skrip ini harus bekerja pada apa pun dengan shell * nix dan utilitas scp. Saya menggunakan Ubuntu, tetapi harus bekerja pada Solaris, OS X, atau bahkan Windows dengan Cygwin diinstal.