Pythonでは、SFTP(SSH File Transfer Protocol)を利用して安全にファイルを送受信できます。
SFTPはSSHを通じてファイルの転送を行うため、暗号化された安全な通信が可能です。
本記事では、Pythonでparamikoを用いたSFTPによるファイル送受信について紹介します。
paramikoを用いたSFTPによるファイル送受信について紹介します
- SFTPとは
- paramikoを用いたSFTPによるファイル送信
- paramikoを用いたSFTPによるファイル受信
SFTPとは
SFTP(SSH File Transfer Protocol)は、暗号化技術を利用して安全にファイルを送受信できます。
SFTPは、クライアント-サーバー間の通信を第3者に盗聴されても、通信内容が暗号化されているため、通信内容が傍受される可能性が低くなります。
sftpのログイン方法はパスワード認証と鍵認証がありますが、鍵認証の方がキーとなる文字列が多いため、よりセキュアです。
sshの標準ポートは22ですが、22以外に設定することも可能です。
SFTPの設定方法
SFTPの設定は、SSHと共通設定なので、SSHの設定を行うことで、設定変更することができます。
よりセキュアな通信を行うために、鍵認証によるログインと、ポート番号を変更することを推奨します。
SFTPコマンド
SFTPは、Linuxコマンドでも実行することができます。
PythonによるSFTPを実行する前に、sftpコマンドで接続方法やファイル送受信を実行してみることを推奨します。
paramikoライブラリとは
PythonでのSFTPは、paramikoライブラリを用いて実行することができます。
paramikoライブラリは、SFTPを含むSSH通信を扱うことができるライブラリです。
paramikoライブラリは、インストールする必要があります。
コマンドライン
pip install paramiko
paramikoを用いたSFTPによるファイル送信
paramikoを用いたSFTPによるファイル送信を紹介します。
ソースコード
import paramiko
# 認証情報
host = '111.111.111.111'
port = 65535 # ポートを指定
username = 'user'
private_key = '/home/user/.ssh/id_rsa' # 認証鍵ファイル
# ローカルファイルとリモートの保存先
local_file = '/home/user/hogehoge.txt'
remote_path = '/home/user/hogehoge.txt'
# SFTP接続を確立
try:
key = paramiko.RSAKey.from_private_key_file(private_key)
transport = paramiko.Transport((host, port))
transport.connect(username=username, pkey=key)
# SFTPセッションを開く
sftp = paramiko.SFTPClient.from_transport(transport)
# ファイルをアップロード
sftp.put(local_file, remote_path)
print(f"File {local_file} has been successfully uploaded to {remote_path}")
finally:
sftp.close()
transport.close()
コマンド実行例
$ python3 -B python-paramiko-sftp-put.py
File /home/user/hogehoge.txt has been successfully uploaded to /home/user/hogehoge.txt
paramikoを用いたSFTPによるファイル受信
paramikoを用いたSFTPによるファイル受信を紹介します。
ソースコード
import paramiko
# 認証情報
host = '111.111.111.111'
port = 65535 # ポートを指定
username = 'user'
private_key = '/home/user/.ssh/id_rsa' # 認証鍵ファイル
# ローカルファイルとリモートの取得元
remote_file = '/home/user/hogehoge.txt'
local_path = '/home/user/hogehoge.txt'
# SFTP接続を確立
try:
key = paramiko.RSAKey.from_private_key_file(private_key)
transport = paramiko.Transport((host, port))
transport.connect(username=username, pkey=key)
# SFTPセッションを開く
sftp = paramiko.SFTPClient.from_transport(transport)
# ファイルをダウンロード
sftp.get(remote_file, local_path)
print(f"File {remote_file} has been successfully downloaded to {local_path}")
finally:
sftp.close()
transport.close()
コマンド実行例
$ python3 -B python-paramiko-sftp-get.py
File /home/user/hogehoge.txt has been successfully downloaded to /home/user/hogehoge.txt
まとめ
paramikoを用いたSFTPによるファイル送受信について紹介しました。
- SSHの設定でSFTP設定ができる
- paramikoライブラリのインストールが必要
- ファイル送信ができる
- ファイル受信ができる
SFTPは、セキュアにファイルを送受信するために重要な通信方法です。
paramikoライブラリを用いることで、PythonでSFTPによる安全なファイル送受信を実行することができます。