Дамп файлов JSON непосредственно в удаленное соединение SSH без предварительного сохранения их на локальном компьютере

Мне нужно выгрузить данные в виде файла JSON на удаленный сервер с использованием SSH-соединения, но мне нужно выгрузить данные непосредственно на удаленный сервер, не сбрасывая их сначала на локальный компьютер. Я использую Paramiko для подключения по SSH, но я открыт для других решений.

Я извлекаю данные из базы данных и конвертирую эти данные в структуры данных словарей. Теперь я хотел бы сбросить эти словари в виде файла JSON, но я не могу сохранить данные на своем локальном компьютере. Мне нужно выгрузить его прямо на сервер, который я подключаю через Python к Paramiko. Мне нужно делать все одновременно, извлекать данные из базы данных, конвертировать в словари и выгружать их на удаленный сервер в виде файлов JSON.

Здесь я добавляю фиктивный код с основными моими потребностями.

import paramiko

dicty = {'a': 1, 'b':2, 'c': 3}

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('141.42.48.20', username='user', password='psw')

with open('dictionary.txt', 'w') as outfile:
    json.dump(dicty, outfile, default=myconverter)

ssh.close()

Что мне нужно, так это вместо того, чтобы выгружать данные в outfile, я хотел бы выгружать их в ssh-клиент.
Я открыт для другого решения или фреймворка. Мне просто нужен словарь в виде JSON, идущий напрямую на сервер.


person Salvador Vigo    schedule 02.05.2019    source источник


Ответы (1)


Просто замените обычный (локальный) open на Paramiko SFTPClient.open:

sftp = ssh.open_sftp()

with sftp.open('dictionary.txt', 'w') as outfile:
    json.dump(dicty, outfile, default=myconverter)

Обязательное предупреждение:
Не используйте AutoAddPolicy таким образом. При этом вы теряете безопасность.
См. Неизвестный сервер Paramiko.

person Martin Prikryl    schedule 02.05.2019