GNU/Linux >> Linux の 問題 >  >> Linux

Pythonスクリプトを使用してSFTPサーバーからファイルをダウンロードする方法

では、sftpとは何ですか?

SFTP(Secure File Transfer Protocol)は、リモートコンピューターへの安全なアクセスを提供する一連のユーティリティを活用して安全な通信を提供するファイル転送プロトコルです。 SSHに依存しています。

Pythonを使用してsftpからファイルをフェッチする理由

このタスクにPythonを使用している理由は、Pythonが強力でありながらシンプルなプログラミング言語であり、実現したい機能を提供する豊富なモジュールを備えているためです。これにより、やりたいことをより早く達成できるようになります。

関連コンテンツ
  • LinuxでSFTPクライアントを操作する方法–10sftpコマンド
  • Debian11サーバーでSFTPサーバーをセットアップする方法
  • Pythonスクリプトを使用してSFTPサーバーからファイルをダウンロードする
  • golangを使用してSFTPサーバーからファイルを一覧表示、アップロード、およびダウンロードする
  • OpenSUSELeap15.3サーバーでSFTPサーバーを設定する方法
  • Ubuntu20.04にsftpサーバーをインストールしてセットアップする方法
  • CentOS 8 /RHEL8サーバーでSFTPサーバーをセットアップする方法

前提条件

フォローするには、次のことを確認してください:

  • システムにPythonパッケージをインストールできます
  • Pythonの基本的な知識があります
  • sftpの基本的な知識があります
  • 端末に快適です。いくつかのコマンドを入力します。

目次

  1. pythonEnvのセットアップとpysftpのインストール
  2. Pythonスクリプトの作成
  3. スクリプトを実行するためのcronの設定

1。 PythonEnvのセットアップとpysftpのインストール

スクリプトを設定して実行できるようにするには、sftpサーバーにログインして必要な操作を実行するロジックを既に実装しているパッケージをインポートする必要があります。 Linuxシステムにパッケージをインストールできますが、推奨される方法はpythonvirtualenvを使用することです。

Python virtualenvは、アプリケーションの環境を分離して、システムと競合することなく依存関係を設定できるようにするツールです。

スクリプト用の仮想環境の作成

Python 2では、次のコマンドを使用して仮想環境を作成します。

virtualenv sftpenv

Python 3は、-mを使用して指定されたモジュールを使用します 国旗。 venvを使用してvirtualenvを作成するには モジュールの場合、次のコマンドを入力します:

python3 -m venv sftpenv

上記のコマンドはシステムに仮想環境を作成しますが、それを有効にする必要があります。 sourceコマンドを使用して、次に示すように作成した仮想環境をアクティブにします。

source sftpenv/bin/activate

virtualenvがセットアップされたので、pysftpをインストールします このコマンドとの依存関係:

pip install pysftp

2。 Pythonスクリプトの作成

環境が整ったので、コードを追加するために使用するファイルを作成しましょう。

vim get-files.py

まず、いくつかの依存関係をインポートしましょう。次のコマンドを使用します:

#!/usr/bin/env python

import pysftp
import time

1行目のディレクティブ#!/usr/bin/env python get-files.pyを実行するときにpythonコマンドを使用するようにスクリプトに指示します 。次に、pysftpをインポートします 私たちの機能とtimeのために コードの依存関係として。

次のセクションでは、接続を作成します。これをtrycatchブロックにカプセル化して、接続が失敗した場合にエラーを適切に処理できるようにします。

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())

パスがわかっている場合に単一のファイルを取得するには、次を使用します:

conn.get('/paymentfiles/09282021/TRXN_HIST_RPT_PARTNER-V0001.CSV')

withコマンドを使用することもできます:

with conn.cd('/paymentfiles/09282021/'):
    conn.get('TRXN_HIST_RPT_PARTNER-V0001.CSV')

ファイル名がわからない場合にフェッチを実行するためのより良い方法は、そのディレクトリに切り替えてから、ファイルとフェッチごとにリストすることです。

with conn.cd('/paymentfiles/09282021/'):
    files = conn.listdir()
    for file in files:
        conn.get(file)

以上です!

完全なコードは次のとおりです:

#!/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。スクリプトを実行するためのcronの設定

スクリプトが完了したので、定期的に実行するプロセスを自動化する必要があります。
午前3時ごとに実行されるcronを作成して、ファイルをフェッチし、/var/logs/scripts/file-fetcher.log

cronを初期化するには:

crontab -e

次に、表示されるウィンドウで:

17 03 * * * /opt/scripts/get-files.py > /var/logs/scripts/file-fetcher.log

ここまでは、sftpサーバーからファイルをフェッチすることができました。
pysftpの詳細については、こちらのドキュメントをご覧くださいhttps://pysftp.readthedocs.io/en/release_0.2.9/


Linux
  1. 毎回Yを押さずにFTPサーバーからMgetコマンドを使用して一度に複数のファイルをダウンロードするにはどうすればよいですか?

  2. シェルからPythonスクリプトを実行する方法

  3. UNIX シェル スクリプトからファイルを ftp およびダウンロードする方法

  1. LinuxでsFTPを使用してファイル/ディレクトリをアップロードまたはダウンロードする方法

  2. wget vs curl:wget と curl を使用してファイルをダウンロードする方法

  3. JavaからPythonスクリプトを実行するには?

  1. SSH経由でファイルをダウンロードおよびアップロードする方法

  2. golangを使用してSFTPサーバーからファイルを一覧表示、アップロード、およびダウンロードする方法

  3. wget コマンドを使用してコマンド ラインからファイルをダウンロードするにはどうすればよいですか?