環境
macOS 10.14.6
Python 3.8.5
paramiko 2.7.2
目次
背景
SFTP通信を行うフリーソフトは色々ありますが、
- 特定のファイルだけ送りたい
- 日次バッチで自動連携したい
のようなニーズがでできたのでPythonとparamikoというライブラリを使ってSFTPによるファイル転送を実装してみました。
実装方法
まずはライブラリのインストール
pip install paramiko
SFTP転送コードは以下の通り。
SFTP通信はSSHで暗号化された通路を使ってFTP通信を行いファイルデータのやりとりを行います。
そのためSSH接続をしてから通信を開始する実装手順となっています。
import paramiko
# SFTP接続設定
sftp_config = {
'host' : 'example.com',
'port' : '22',
'user' : 'user',
'pass' : 'pass'
}
#SSH接続の準備
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
client.connect(sftp_config['host'],
port=sftp_config['port'],
username=sftp_config('user'),
password=sftp_config['pass'])
# SFTPセッション開始
sftp_connection = client.open_sftp()
### 相手先サーバにファイルを転送する場合
CONNECT_PATH = 'XXX' # 相手先サーバのフォルダパス
for f in files: #転送対象ファイルリストがfilesに入っていると仮定
sftp_connection.put(f, CONNECT_PATH + f)
sftp_connection.close()
### 相手先サーバからファイルをダウンロードする場合
#第1引数が相手先サーバのファイル名、第2引数がダウンロードしてくるときのファイル名
sftp_connection.get(CONNECT_PATH + 'test.csv', 'download_test.csv')
client.close()