直接上传文件到SFTP而不存储到本地系统
Upload file to SFTP directly without storing it into local system
我正在尝试加密文件,然后使用 python 将加密文件直接上传到 SFTP。
目前,我首先将加密文件存储到我的本地系统,然后将其推送到SFTP。是否可以直接将其推送到 SFTP 而无需将其存储到我的本地系统?
加密
加密并发送文件到远程服务器(encrypt_and_send.py
):
from cryptography.fernet import Fernet
from io import BytesIO
import pysftp
from time import sleep
secret_key = b'fj6IO3olXODT7Z2xWjFoJkzg0qztYIkPtf-wDXwnwpY='
fernet = Fernet(secret_key)
with open('data.txt', 'rb') as file:
original_data = file.read()
print('Data to encode:')
print(original_data.decode('utf-8'))
encrypted_data = fernet.encrypt(original_data)
print('Encrypted data:')
print(encrypted_data.decode('utf-8'))
file_like_object = BytesIO(encrypted_data)
with pysftp.Connection(host="192.168.1.18", username="root", password="password", log="/tmp/pysftp.log") as sftp:
file_like_object.seek(0)
sftp.putfo(file_like_object, 'output.txt')
print('sent')
输出:
Data to encode:
a
b
c
d
e
f
Encrypted data:
gAAAAABhE4sAq5iHkZ36H_vbVuBdlGrtLrQNpAXe-utbZT_JOHxnb1FipftlLiZcCO7AnkX_CEF4bz1oZk-CC57ubStE7u6k-w==
sent
解密
读取远程机器上的数据(decrypt.py
)
from cryptography.fernet import Fernet
secret_key = b'fj6IO3olXODT7Z2xWjFoJkzg0qztYIkPtf-wDXwnwpY='
fernet = Fernet(secret_key)
with open('output.txt', 'rb') as enc_file:
encrypted = enc_file.read()
print(fernet.decrypt(encrypted).decode('utf-8'))
输出:
a
b
c
d
e
f
附加信息
当我 运行 这个脚本使用 pysftp==0.2.9
异常时出现:
Exception ignored in: <function Connection.__del__ at 0x102941f70>
Traceback (most recent call last):
File "/.../lib/python3.9/site-packages/pysftp/__init__.py", line 1013, in __del__
File "/.../lib/python3.9/site-packages/pysftp/__init__.py", line 795, in close
ImportError: sys.meta_path is None, Python is likely shutting down
看起来像是库问题。
pysftp==0.2.8
传输数据没有任何问题。
我正在尝试加密文件,然后使用 python 将加密文件直接上传到 SFTP。
目前,我首先将加密文件存储到我的本地系统,然后将其推送到SFTP。是否可以直接将其推送到 SFTP 而无需将其存储到我的本地系统?
加密
加密并发送文件到远程服务器(encrypt_and_send.py
):
from cryptography.fernet import Fernet
from io import BytesIO
import pysftp
from time import sleep
secret_key = b'fj6IO3olXODT7Z2xWjFoJkzg0qztYIkPtf-wDXwnwpY='
fernet = Fernet(secret_key)
with open('data.txt', 'rb') as file:
original_data = file.read()
print('Data to encode:')
print(original_data.decode('utf-8'))
encrypted_data = fernet.encrypt(original_data)
print('Encrypted data:')
print(encrypted_data.decode('utf-8'))
file_like_object = BytesIO(encrypted_data)
with pysftp.Connection(host="192.168.1.18", username="root", password="password", log="/tmp/pysftp.log") as sftp:
file_like_object.seek(0)
sftp.putfo(file_like_object, 'output.txt')
print('sent')
输出:
Data to encode:
a
b
c
d
e
f
Encrypted data:
gAAAAABhE4sAq5iHkZ36H_vbVuBdlGrtLrQNpAXe-utbZT_JOHxnb1FipftlLiZcCO7AnkX_CEF4bz1oZk-CC57ubStE7u6k-w==
sent
解密
读取远程机器上的数据(decrypt.py
)
from cryptography.fernet import Fernet
secret_key = b'fj6IO3olXODT7Z2xWjFoJkzg0qztYIkPtf-wDXwnwpY='
fernet = Fernet(secret_key)
with open('output.txt', 'rb') as enc_file:
encrypted = enc_file.read()
print(fernet.decrypt(encrypted).decode('utf-8'))
输出:
a
b
c
d
e
f
附加信息
当我 运行 这个脚本使用 pysftp==0.2.9
异常时出现:
Exception ignored in: <function Connection.__del__ at 0x102941f70>
Traceback (most recent call last):
File "/.../lib/python3.9/site-packages/pysftp/__init__.py", line 1013, in __del__
File "/.../lib/python3.9/site-packages/pysftp/__init__.py", line 795, in close
ImportError: sys.meta_path is None, Python is likely shutting down
看起来像是库问题。
pysftp==0.2.8
传输数据没有任何问题。