Jadi apa itu sftp?
SFTP (Secure File Transfer Protocol) adalah protokol transfer file yang memanfaatkan seperangkat utilitas yang menyediakan akses aman ke komputer jarak jauh untuk menyampaikan komunikasi yang aman. Itu bergantung pada SSH.
Mengapa mengambil file dari sftp menggunakan python?
Alasan kami menggunakan python untuk tugas ini adalah karena python adalah bahasa pemrograman yang kuat namun sederhana yang memiliki beberapa modul kaya yang menyediakan fungsionalitas yang ingin kami capai. Ini akan memungkinkan kita untuk mencapai apa yang ingin kita lakukan lebih cepat.
Konten Terkait
- Cara bekerja dengan klien SFTP di Linux – 10 perintah sftp
- Cara menyiapkan server SFTP di Server Debian 11
- Unduh File dari server SFTP Menggunakan skrip python
- Daftar, Unggah, dan Unduh file dari Server SFTP menggunakan golang
- Cara menyiapkan server SFTP di Server OpenSUSE Leap 15.3
- Cara menginstal dan menyiapkan server sftp di Ubuntu 20.04
- Cara menyiapkan server SFTP di Server CentOS 8 /RHEL 8
Prasyarat
Untuk mengikuti, pastikan:
- Anda dapat menginstal paket python di sistem Anda
- Anda memiliki pengetahuan dasar tentang Python
- Anda memiliki pengetahuan dasar tentang sftp
- Nyaman dengan terminal. Kami akan mengetik beberapa perintah.
Daftar Isi
- Menyiapkan python Env dan menginstal pysftp
- Membuat skrip python
- Menyiapkan cron untuk menjalankan skrip
1. Menyiapkan python Env dan menginstal pysftp
Agar kami dapat mengatur dan menjalankan skrip, kami perlu mengimpor paket yang sudah mengimplementasikan logika untuk masuk ke server sftp dan melakukan operasi yang diperlukan. Kami dapat menginstal paket di sistem linux kami tetapi cara yang disarankan adalah menggunakan python virtualenv.
Virtualenv Python adalah alat yang memungkinkan Anda mengisolasi lingkungan untuk aplikasi Anda sehingga Anda dapat mengatur dependensinya tanpa bertentangan dengan sistem.
membuat lingkungan virtual untuk skrip kita
Di Python 2, buat lingkungan virtual menggunakan perintah ini:
virtualenv sftpenv
Python 3 menggunakan modul yang ditentukan menggunakan -m
bendera. untuk membuat virtualenv menggunakan venv
modul, ketik perintah ini:
python3 -m venv sftpenv
Perintah di atas akan membuat env virtual di sistem kami, tetapi kami harus mengaktifkannya. Gunakan perintah source untuk mengaktifkan virtual env yang baru saja kita buat seperti gambar di bawah ini:
source sftpenv/bin/activate
Sekarang virtualenv sudah diatur, Instal pysftp
ketergantungan dengan perintah ini:
pip install pysftp
2. Membuat skrip python
Sekarang lingkungan sudah diatur, mari buat file yang akan kita gunakan untuk menambahkan kode.
vim get-files.py
Pertama mari kita impor beberapa dependensi. Gunakan perintah ini:
#!/usr/bin/env python
import pysftp
import time
Arahan di baris 1 #!/usr/bin/env python
menginstruksikan skrip untuk menggunakan perintah python ketika kita menjalankan get-files.py
. Kami kemudian mengimpor pysftp
untuk fungsionalitas dan time
kami sebagai ketergantungan dalam kode kita.
Bagian selanjutnya adalah membuat koneksi. Kami merangkum ini dalam blok try catch sehingga kami menangani kesalahan dengan baik jika koneksi gagal.
try:
print("connecting to %s as %s" % (host, username))
conn = pysftp.Connection(
host=host,
port=port,
username=username,
password=password,
)
print("connection established successfully: ", conn)
except Exception:
print('failed to establish connection to targeted server')
Dengan koneksi tersebut, sekarang kita dapat membuat daftar file atau direktori atau mendapatkan direktori kerja.
current_dir = conn.pwd
print('our current working directory is: ', current_dir)
print('available list of directories: ', conn.listdir())
Untuk mendapatkan satu file jika Anda mengetahui jalurnya, gunakan ini:
conn.get('/paymentfiles/09282021/TRXN_HIST_RPT_PARTNER-V0001.CSV')
Kita juga bisa menggunakan perintah with:
with conn.cd('/paymentfiles/09282021/'):
conn.get('TRXN_HIST_RPT_PARTNER-V0001.CSV')
Cara yang lebih baik untuk melakukan pengambilan jika kita tidak mengetahui nama file adalah dengan beralih ke direktori tersebut, lalu daftarkan file dan untuk setiap pengambilan.
with conn.cd('/paymentfiles/09282021/'):
files = conn.listdir()
for file in files:
conn.get(file)
Itu saja!
Ini kode lengkapnya:
#!/usr/bin/env python
import pysftp
import time
host = '10.2.11.50'
port = 22
username = 'citizix_user'
password= 'str0NgP45sword'
try:
print("connecting to %s as %s" % (host, username))
conn = pysftp.Connection(
host=host,
port=port,
username=username,
password=password,
)
print("connection established successfully: ", conn)
except Exception:
print('failed to establish connection to targeted server')
current_dir = conn.pwd
print('our current working directory is: ', current_dir)
print('available list of directories: ', conn.listdir())
dlfiles = []
with conn.cd('/paymentfiles/09282021/'):
files = conn.listdir()
for file in files:
conn.get(file)
dlfiles.append(file)
print(file, ' downloaded successfully ')
print("These files were downloades ", dlfiles)
3. Menyiapkan cron untuk menjalankan skrip
Sekarang setelah skrip kita selesai, kita perlu mengotomatiskan proses menjalankannya secara berkala.
Mari kita buat cron yang berjalan setiap jam 3 pagi untuk mengambil file dan masuk ke /var/logs/scripts/file-fetcher.log
Untuk memulai cron:
crontab -e
Kemudian pada jendela yang muncul:
17 03 * * * /opt/scripts/get-files.py > /var/logs/scripts/file-fetcher.log
Sampai di sini kami berhasil mengambil file dari server sftp.
Untuk memeriksa lebih lanjut tentang pysftp, lihat dokumen di sini https://pysftp.readthedocs.io/en/release_0.2.9/