では、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の基本的な知識があります
- 端末に快適です。いくつかのコマンドを入力します。
目次
- pythonEnvのセットアップとpysftpのインストール
- Pythonスクリプトの作成
- スクリプトを実行するための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/