Automatisasi Mudah: Panduan Membuat Autoupload menggunakan WinSCP dan PowerShell

Sandi Kurniawan
NDID Engineering
Published in
8 min readFeb 26, 2024
  1. Gambaran Umum

Efisiensi dalam manajemen file dan transfer data menjadi kunci utama bagi banyak pengguna dalam konteks pengembangan teknologi saat ini. Artikel ini akan berbagi melalui proses pembuatan sistem autoupload yang efisien dan sederhana menggunakan command line pada WinSCP dan PowerShell. Pada tutorial ini, kita menggunakan server Linux yang berjalan di Azure, dengan penggunaan protokol FTP melalui vsftpd sebagai layanan FTP. File upload akan diotomatisasi menggunakan aplikasi WinSCP, sementara PowerShell akan berperan penting dalam membantu proses autoupload melalui watcher file yang dapat memantau perubahan file secara real-time. Dengan mengikuti panduan ini, kita dapat meningkatkan efisiensi dan menghemat waktu dalam pengelolaan file pada server.

Mari kita mulai dengan sedikit gambaran mengenai komponen-komponen utama yang terlibat dalam sistem ini.

a) vsftpd (Very Secure FTP Daemon):

vsftpd adalah layanan FTP (File Transfer Protocol) yang dirancang untuk memberikan keamanan dalam melakukan transfer file. Layanan ini dikenal karena fokus pada keamanan dan memiliki fitur-fitur seperti dukungan untuk enkripsi SSL/TLS dan konfigurasi yang sangat terkendali. Namun pada tutorial kali ini, kita belum akan sampai menggunkan SSL dalam pengimplementasiannya.

b) Winscp (WinSCP Command Line):

Winscp adalah aplikasi sumber terbuka untuk mentransfer file melalui protokol FTP, SFTP, SCP, dan lainnya. Dengan menggunakan Winscp secara command line, kita dapat menyederhanakan dan mengotomatisasi proses pengiriman file. Kunjungi laman berikut untuk perintah lebih lengkapnya https://winscp.net/eng/docs/feature_index.

c) PowerShell Watcher:

PowerShell adalah lingkungan shell dan skrip pada Windows. PowerShell Watcher merujuk pada kemampuan PowerShell untuk memantau perubahan pada sistem file secara real-time. Dengan memanfaatkan watcher file, PowerShell dapat mendeteksi perubahan file, seperti penambahan, penghapusan, atau modifikasi, dan mengeksekusi tindakan tertentu. Dalam konteks artikel ini, PowerShell Watcher akan digunakan untuk mengaktifkan otomatisasi autoupload setiap kali terjadi penambahan file pada folder yang diawasi.

2. Menyiapkan Direktori Pengguna

Untuk memulai, kita akan membuat pengguna FTP khusus. Home directory default tidak diperlukan untuk pengguna ini karena file yang diupload akan diarahkan ke folder tertentu.

Gunakan perintah berikut:

#Membuat pengguna baru
sudo useradd -M autoupload
#Set password pengguna baru, passwordnya adalah “password”
sudo passwd autoupload

Selanjutnya, kita akan menyiapkan folder yang telah dikonfigurasi untuk menyimpan file upload dari pengguna ini:

#Membuat folder untuk menyimpan file upload per pengguna
mkdir -p /data/ftp/autoupload
#Set kepemilikan folder
sudo chown autoupload:autoupload /data/ftp/autoupload
#Set izin folder
sudo chmod 700 /data/ftp/autoupload
#Set home directory pengguna
sudo usermod -d /data/ftp/autoupload autoupload

Setelah itu kita perlu mendaftarkan pengguna pada daftar user vsftpd, yang nantinya akan dipakai pada saat konfigurasi akses ftp:

#Menambahkan pengguna “autoupload” pada file /etc/vsftpd.user_list
echo \"autoupload\" >> /etc/vsftpd.user_list

Dengan langkah-langkah ini, pengguna FTP khusus “autoupload” telah dibuat dan folder untuk menyimpan file upload sudah siap dengan pengaturan kepemilikan dan izin yang sesuai.

3. Menyiapkan VSFTPD

3.1. Instalasi VSFTPD

Pertama, pastikan sistem operasi Linux kita telah diperbarui. Kemudian, instal VSFTPD dengan menggunakan perintah berikut:

sudo apt update
sudo apt install vsftpd

3.2. Backup Konfigurasi Asal

Untuk menghindari kehilangan konfigurasi asal, disarankan untuk membuat salinan cadangan dari file konfigurasi VSFTPD sebelum melakukan perubahan. Gunakan perintah berikut:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

3.3. Membuka Firewall

Selanjutnya kita periksa status firewall untuk memastikan apakah diaktifkan atau tidak.

sudo ufw status

Jika aktif maka kita perlu untuk menambahkan aturan untuk lalu lintas FTP. Buka port 20 untuk FTP dan rentang port 30000–30100 untuk passive port yang akan kita pakai pada konfigurasi vsftpd.

sudo ufw allow 20/tcp
sudo ufw allow 30000:30100/tcp

Selain itu kita perlu menambahkan port tersebut melalui portal azure dengan cara menambahkan inbound security rules pada network security group.

Masuk ke portal azure, cari nsg service yang kita pakai, lalu masuk ke menu Inbound security rules.

Di sini kita akan menambahkan 2 inbound rules baru

3.4. Konfigurasi Akses FTP

Mari kita mulai mengonfigurasi akses FTP dengan mengupdate file konfigurasi VSFTPD, yaitu /etc/vsftpd.conf. Di bawah ini adalah konfigurasi yang perlu ditambahkan atau diperbarui dalam file tersebut

# Mendengarkan pada port 8921 untuk koneksi FTP masuk
listen_port=8921
# Mengaktifkan daemon FTP untuk mendengarkan koneksi masuk
listen=YES
# Menonaktifkan dukungan IPv6 untuk mendengarkan
listen_ipv6=NO
# Menonaktifkan akses FTP anonim
anonymous_enable=NO
# Memungkinkan pengguna lokal untuk login
local_enable=YES
# Mengaktifkan semua bentuk perintah tulis FTP
write_enable=YES
# Umask default untuk pengguna lokal
local_umask=022
# Mengaktifkan pesan direktori
dirmessage_enable=YES
# Menampilkan daftar direktori dengan waktu di zona waktu lokal Anda
use_localtime=YES
# Mengaktifkan logging untuk upload/download
xferlog_enable=YES
# Pastikan koneksi transfer PORT berasal dari port 20 (ftp-data)
connect_from_port_20=YES
# Membatasi pengguna lokal ke direktori home mereka
chroot_local_user=YES
# Menentukan direktori kosong untuk chroot yang aman
secure_chroot_dir=/var/run/vsftpd/empty
# Menentukan nama layanan PAM
pam_service_name=vsftpd
# Memaksa file titik (file yang dimulai dengan titik) untuk ditampilkan
force_dot_files=YES
# Mengaktifkan mode pasif untuk transfer data
pasv_enable=YES
# Menentukan rentang port mode pasif
pasv_min_port=30000
pasv_max_port=30100
# Mengaktifkan daftar pengguna untuk mengontrol akses
userlist_enable=YES
# Menentukan file yang berisi daftar pengguna
userlist_file=/etc/vsftpd.user_list
# Menggunakan $USER sebagai token substitusi untuk local_root
user_sub_token=$USER
# Memungkinkan pengguna lokal memiliki akses tulis dalam direktori home yang di-chroot
allow_writeable_chroot=YES
# Menentukan direktori untuk pengguna
local_root=/data/ftp/$USER

Pastikan untuk menyimpan perubahan setelah menambahkan konfigurasi tersebut. Setelah selesai, restart layanan VSFTPD untuk menerapkan konfigurasi baru:

sudo systemctl restart vsftpd

Untuk memastikan layanan ftp sudah dapat digunakan kita dapat melakukan pengecekan dengan cara berikut:

telnet host 8921

Dengan menyelesaikan langkah-langkah konfigurasi VSFTPD, layanan FTP Anda sekarang telah siap digunakan. Semua pengaturan yang diperlukan, termasuk firewall, direktori pengguna, dan konfigurasi VSFTPD, telah diatur dengan baik untuk mendukung transfer file. Selanjutnya kita akan melakukan konfigurasi winscp dan watcher folder.

4. Konfigurasi Uploader

Langkah pertama yang perlu kita lakukan adalah mengunduh dan melakukan instalasi winscp dari laman berikut https://winscp.net/eng/download.php

4.1. Uploader Script

Kita akan membuat windows script dengan nama uploader.bat, script ini bertanggung jawab untuk melakukan upload file, berikut isi dari script:

Pada baris ke-3 sampai 8 dilakukan pemanggilan eksekusi WinSCP sesuai dengan tempat kita menyimpan programnya dengan parameter tertentu:

/log: Menentukan lokasi file log untuk mencatat aktivitas WinSCP.

/ini=nul: Membuat file konfigurasi WinSCP.ini kosong agar menggunakan konfigurasi default.

/command: Memulai mode eksekusi perintah.

“open ftp://autoupload:password@xxx.xxx.xxx.xxx:8921/": Membuka koneksi FTP ke server dengan alamat IP/domain, port, dan kredensial tertentu.

“mput D:\share\Folder\* /”: Meng-upload semua file dari folder lokal ke server FTP. Jika kita ingin melakukan filter terhadap file yang akan diupload maka kita dapat menambahkan beberapa file yang diinginkan, misalnya kita hanya ingin mengupload file xls dan csv maka kita cukup mengubah baris ini menjadi “mput D:\share\Folder\*.xls D:\share\Folder\*.csv /” (Jangan lupa untuk menyesuaikan file yang harus dihapus pada baris ke 12).

“exit”: Menutup koneksi FTP setelah selesai.

Dari baris ke-9 sampai 17 adalah proses yang dilakukan setelah proses upload selesai. Bagian ini mengelola hasil eksekusi WinSCP dengan menyimpannya dalam variabel WINSCP_RESULT. Jika hasilnya berhasil (0), skrip menampilkan pesan "Success," menghapus semua file dalam folder lokal, dan mengakhiri skrip dengan status exit yang sesuai. Jika eksekusi tidak berhasil, skrip menampilkan pesan "Error." Keseluruhan proses memberikan umpan balik tentang keberhasilan atau kegagalan upload file menggunakan WinSCP.

4.2. Watcher Folder

Di sini, kita akan membuat sebuah watcher menggunakan skrip PowerShell untuk mendeteksi penambahan file dalam suatu folder. Watcher ini akan memicu eksekusi skrip uploader untuk mengirimkan file-file yang baru ditambahkan tersebut.

Pada baris pertama kita mengatur kebijakan eksekusi PowerShell untuk memungkinkan eksekusi skrip lokal.

Baris ke-6 sampai 8 kita membuat objek watcher untuk melihat semua perubahan file di dalam folder yang diawasi.

$action = { … }: Mendefinisikan tindakan (action) yang akan diambil setelah watcher mendeteksi perubahan di dalam folder. Di sini, ketika ada file baru (Created), skrip akan mencatat ke log dan menjalankan skrip uploader.bat.

$created = Register-ObjectEvent $watcher “Created” -Action $action: Mendaftarkan peristiwa (Created) ke objek watcher dan menetapkan tindakan yang harus diambil sesuai dengan definisi $action.

5. Melakukan Tes

Untuk menjalankan watcher folder secara latar belakang, kita dapat menggunakan perintah berikut:

powershell.exe -windowstyle hidden -file watcher.ps1

Selanjutnya, perintah tersebut akan disimpan dalam file startup.bat yang akan diatur untuk berjalan secara otomatis ketika PC pertama kali menyala. Untuk memastikan bahwa watcher sudah berjalan, kita dapat melakukan pengecekan melalui Task Manager -> Users -> lalu buka detail proses dan kita bisa melihat Windows PowerShell

Berikut adalah gambaran struktur folder dan file dari sistem autouploader yang telah kita buat.

Kita dapat menyimpan sebuah file ke dalam D:\share\Folder, kemudian tunggu sejenak. Jika tidak ada masalah, maka file akan langsung hilang dari folder tersebut.

Untuk menjalankan watcher secara otomatis pada saat PC pertama kali menyala, kita dapat menambahkan shortcut startup.bat ke dalam folder startup dengan langkah-langkah berikut:

  • Buat file shortcut untuk file startup.bat
  • Buka folder Startup dengan menekan tombol Win + R, lalu ketik shell:startup. Selanjutnya, pindahkan shortcut ke dalam folder Startup.
  • Konfirmasikan bahwa skrip akan dijalankan secara otomatis dengan memeriksa di Task Manager -> Startup.

6. Kesimpulan

Kita telah berhasil membuat dan mengintegrasikan beberapa komponen dalam sistem autouploader ini. Konfigurasi VSFTPD telah diatur untuk menerima upload file secara otomatis, dibantu oleh skrip PowerShell watcher yang secara aktif mendeteksi penambahan file dalam folder target. Penerapan otomatisasi ini memastikan file yang ditambahkan langsung diupload ke server FTP. Selain itu, kita telah menyiapkan skrip untuk memulai watcher secara otomatis saat PC pertama kali menyala. Dengan demikian, proses pengelolaan file antara sistem lokal dan server FTP dapat dilakukan secara efisien dan tanpa intervensi manual.

Semua skrip yang telah dibuat dapat dilihat di https://github.com/131511025/autouploader

--

--