目的
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ファイル送信を行うことが出来ました。