GNU/Linux >> Belajar Linux >  >> Linux

Cara mengunduh File dari server SFTP Menggunakan skrip python

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

  1. Menyiapkan python Env dan menginstal pysftp
  2. Membuat skrip python
  3. 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/


Linux
  1. Bagaimana Cara Mengunduh Banyak File Sekaligus Menggunakan Perintah Mget Dari Server Ftp Tanpa Menekan Y Setiap Saat?

  2. Cara menjalankan skrip Python dari shell

  3. wget vs curl:Cara Mengunduh File Menggunakan wget dan curl

  1. Cara Mengunggah atau Mengunduh File/Direktori Menggunakan sFTP di Linux

  2. Bagaimana cara mengunduh file dari baris perintah menggunakan perintah wget?

  3. Bagaimana cara menghentikan proses dari Python menggunakan pid?

  1. Cara Mengunduh dan Mengunggah File melalui SSH

  2. Cara Daftar, Unggah, dan Unduh file dari Server SFTP menggunakan golang

  3. Bagaimana cara ftp dan Mengunduh file dari Skrip Shell UNIX?