Python

PythonでSFTP通信してみる

はじめに

Rloginのファイル転送機能を使って、定期的にサーバ上のログファイルをホスト側にダウンロードしていたが面倒くさくなってきたのでPythonで自動化してみる。

本記事のゴール

PythonライブラリのParamikoを使って、WSL2で作ったUbuntu内の特定ディレクトリ内のファイルをホスト側PCにダウンロードする。

(アップロードは今回しない。)

環境

  • Windows 10 64bit
  • Ubuntu 20.04.4 LTS

利用ライブラリ

事前準備

Paramikoのインストール

pip install paramiko

コード

サーバ側の/home/ashitaka1963 にあるファイルtest.txt をホスト側PCのpythonを実行したディレクトリと同階層にあるbkフォルダにファイル名bk_test.txt としてダウンロードする。

※ダウンロードするファイルと配置先については権限があることを事前に確認しておく。

import paramiko
with paramiko.SSHClient() as client:
HOSTNAME = '127.0.0.1'
USERNAME = 'ashitaka1963'
PASSWORD = 'password'
REMOTE_PATH = '/home/ashitaka1963/test.txt'
LOCAL_PATH = '.\\bk\\bk_test.txt'

# SSH接続
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=HOSTNAME, port=22, username=USERNAME, password=PASSWORD)

# SFTP
with client.open_sftp() as sftp:
sftp.get(remotepath=REMOTE_PATH, localpath=LOCAL_PATH)

おわりに

Paramikoを使って、SFTPでファイルのダウンロードができました。

今回はダウンロードだけでしたが、アップロードもコードはほとんど同じで、sftp.putメソッドを使えばアップロードもできるみたいです。

参考