【Python3】ParamikoのSFTPを使用してファイルのダウンロード・アップロードをする方法
おはこんばんにちは、せなです。
今回はParamikoのSFTPを使用してファイルをダウンロードする方法を解説します。
環境
- Python 3.9
- paramiko 2.8.1
Paramikoについて
ParamikoはSSHv2で実装されているPythonライブラリです。
クライアントとサーバーの両方の機能を使用することができます。
以下のコマンドでインストールできます。
pip3 install paramiko
詳しいインストール方法については以下の公式ページを参考にしてください。
https://www.paramiko.org/installing.html
ファイルダウンロード
以下、サンプルコードです。
定数を変更することでファイルのダウンロードが行えます。
import paramiko
from paramiko.ssh_exception import BadHostKeyException, BadAuthenticationType, AuthenticationException, SSHException
# 定数
HOSTNAME = "Host名 or IPアドレス"
USERNAME = "ユーザー名"
PASSWORD = "パスワード"
REMOTEDIR = "ダウンロードパス"
REMOTEFILE = "ダウンロードファイル名"
LOCALDIR = "保存パス"
LOCALFILE = "保存ファイル名"
def ssh_connect():
"""
SSH接続
"""
client = paramiko.client.SSHClient()
# HostKyeの読み込み
client.load_system_host_keys()
# HostKeyがない場合にHost名とHostKyeを保存
client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy())
try:
client.connect(hostname=HOSTNAME, username=USERNAME, password=PASSWORD, timeout=10, auth_timeout=30)
except BadHostKeyException:
# hostkeyの不一致
print("The host key given by the SSH server did not match what we were expecting.")
except BadAuthenticationType:
# 認証タイプが許可されていない(パスワード認証が許可されていないなど)
print("Exception raised when an authentication type is used, but the server isn’t allowing that type.")
except SSHException:
# sshプロトコルの失敗
print("Exception raised by failures in SSH2 protocol negotiation or logic errors.")
except AuthenticationException:
# 不明なエラーで認証に失敗
print("Exception raised when authentication failed for some reason")
return client
def sftp_download(remote_file, local_file):
"""
SFTPダウンロード
"""
# ssh接続
with ssh_connect() as client:
# sftp
with client.open_sftp() as sftp:
# ファイルパス
remotepath = REMOTEDIR + remote_file
localpath = LOCALDIR + local_file
# ダウンロード
sftp.get(remotepath=remotepath,localpath=localpath)
return
if __name__ == '__main__':
sftp_download(remote_file=REMOTEFILE, local_file=LOCALFILE)
ファイルアップロード
アップロードの方法はダウンロードとほとんど変わりません。
以下サンプルソースも定数を変更することで使用できます。
import paramiko
from paramiko.ssh_exception import BadHostKeyException, BadAuthenticationType, AuthenticationException, SSHException
# 定数
HOSTNAME = "Host名 or IPアドレス"
USERNAME = "ユーザー名"
PASSWORD = "パスワード"
REMOTEDIR = "アップロード先パス"
REMOTEFILE = "アップロード先ファイル名"
LOCALDIR = "アップロード元パス"
LOCALFILE = "アップロード元ファイル名"
def ssh_connect():
"""
SSH接続
"""
client = paramiko.client.SSHClient()
# HostKyeの読み込み
client.load_system_host_keys()
# HostKeyがない場合にHost名とHostKyeを保存
client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy())
try:
client.connect(hostname=HOSTNAME, username=USERNAME, password=PASSWORD, timeout=10, auth_timeout=30)
except BadHostKeyException:
# hostkeyの不一致
print("The host key given by the SSH server did not match what we were expecting.")
except BadAuthenticationType:
# 認証タイプが許可されていない(パスワード認証が許可されていないなど)
print("Exception raised when an authentication type is used, but the server isn’t allowing that type.")
except SSHException:
# sshプロトコルの失敗
print("Exception raised by failures in SSH2 protocol negotiation or logic errors.")
except AuthenticationException:
# 不明なエラーで認証に失敗
print("Exception raised when authentication failed for some reason")
return client
def sftp_upload(remote_file, local_file):
"""
SFTPアップロード
"""
# ssh接続
with ssh_connect() as client:
# sftp
with client.open_sftp() as sftp:
# ファイルパス
remotepath = REMOTEDIR + remote_file
localpath = LOCALDIR + local_file
# アップロード
sftp.put(remotepath=remotepath, localpath=localpath)
return
if __name__ == '__main__':
sftp_upload(remote_file=REMOTEFILE, local_file=LOCALFILE)
最後に
お読み頂きありがとうございます。
最近使用する機会があったので、Paramikoを使用したSFTPについて簡単に記載してみました。
ダウンロード・アップロードだけではなくSSH接続後にサーバー内の操作ができたりするのでその辺りについても、書けたらなと思います。
ではでは〜
ディスカッション
コメント一覧
まだ、コメントがありません