LoginSignup
9
4

More than 3 years have passed since last update.

Pythonでsftpファイル送信

Last updated at Posted at 2021-03-22

目的

Pythonでsftpファイル送信を行いたい

利用ライブラリ

sftp開発環境構築

Dockerで「atmoz/sftp」を利用し構築します。
以下のコマンドでコンテナ起動します。

docker run -p 22:22 -d atmoz/sftp hoge:pass:::upload

ユーザ名「hoge」パスワード「pass」アップロード先フォルダ「upload」で構築しました。

sftp接続確認

$ sftp hoge@localhost
hoge@localhost's password: 
Connected to localhost.
sftp> ls
upload  
sftp> cd upload/
sftp> pwd
Remote working directory: /upload

接続確認ができましたのでローカルのsftp環境はOK

Pythonでsftpファイル送信を試す

まずは paramiko をインストール

$pip install paramiko

Pythonでローカルにファイルを作成し
そのファイルをsftpファイル送信してみます。

# coding: utf8

import paramiko

# SFTP接続情報
SFTP_HOST = 'localhost'
SFTP_PORT = 22
SFTP_USER = 'hoge'
SFTP_PASS = 'pass'

# アップロード先パス
UPLOAD_FILE_PATH = '/upload/test.txt'
# ローカルのアップロード予定ファイル
LOCAL_FILE_PATH = './test.txt'


def main():
    # アップロードするファイル作成
    with open(LOCAL_FILE_PATH, 'w') as local_file:
        local_file.write('test')

    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
    client.connect(SFTP_HOST, port=SFTP_PORT, username=SFTP_USER, password=SFTP_PASS)
    sftp = client.open_sftp()
    # sftpファイル送信
    sftp.put(LOCAL_FILE_PATH, UPLOAD_FILE_PATH)
    if sftp:
        sftp.close()

if __name__ == '__main__':
    main()

ファイル確認

再度、sftp接続しファイルが作成されているか確認してみます。

$ sftp hoge@localhost
hoge@localhost's password:
Connected to localhost.
sftp> cd upload/
sftp> ls -la
drwxr-xr-x    2 1000     100          4096 Mar 22 09:53 .
drwxr-xr-x    3 root     root         4096 Mar 22 09:30 ..
-rw-r--r--    1 1000     100             4 Mar 22 09:53 test.txt

ファイルが存在しており無事にPythonでsftpファイル送信を行うことが出来ました。

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4