2013-03-22 4 views
0

Я использую Paramiko, чтобы загрузить несколько изображений на localhost, а затем загрузить их на сервер через SSH.Как перенести данные с одного сервера на другой без загрузки на локальный с помощью Python?

Как достичь этого, не загрузив его на локальный? Поскольку сервер не работает при загрузке и загрузке больших файлов (> 100 мб).

Что-то похожее на это: https://unix.stackexchange.com/questions/9029/how-to-wget-a-file-to-a-remote-machine-over-ssh

Но в Python.

ответ

1

Предполагая, что у вас есть сетевая структура, как это:

local machine ---X--- machine A 
       |   | 
       |   Z 
       |   | 
       ---Y---- machine B 

тогда вы скачиваете через ссылку X, а затем загрузить через ссылку Y. Если machine A может говорить прямо с machine B, тогда ссылка Z также существует. Это будет тот случай, когда оба machine A и machine B являются общедоступными.

Итак, вы хотите, чтобы machine A инициировал прямую передачу изображений на machine B. На данный момент это код, запущенный на machine A/B, который обрабатывает передачу, поэтому вполне вероятно, что решение Python только поможет вам начать передачу.

Если вы делали это из оболочки Баш с помощью ssh, вы можете ввести что-то вроде этого:

ssh [email protected] 'scp myfile [email protected]' 

Это предполагает, что у вас есть доступ к оболочке сервера SSH на machine A и что он имеет программу scp установлен. Парамико полезен только для подключения к machine A для инициирования передачи, а не для обработки самой передачи.

Нечто подобное может работать:

ssh = paramiko.SSHClient() 
ssh.connect('machineA', username='user', password='passwd') 
stdin, stdout, stderr = ssh.exec_command("scp '{imgpath}' [email protected]".format(
    imgpath='path/to/file/on/machineA') 

Update:

Если изображения обслуживаются из machine A, но у вас нет SSH доступ входа в систему, то изображения могут быть выведены непосредственно до machine B, выполнив вход в machine B и выполнив команду для извлечения изображения. Для этого обычно можно использовать wget. Таким образом, код, чтобы сделать это из localhost может быть:

ssh = paramiko.SSHClient() 
ssh.connect('machineB', username='user', password='passwd') 
stdin, stdout, stderr = ssh.exec_command("wget '{imgurl}'".format(
    imgurl='http://url.to.image/file') 

Для тестирования, просто пропустите использование paramiko и использовать SSH/Wget непосредственно.

+0

Это отличный ответ, но он не решает точную цель. Предположим, у меня есть URL-адрес случайного изображения, что я сейчас делаю, загружая изображение, а затем загружаю его. Как удалить эту загрузку на мою локальную фазу? – Hick

+0

Обычно я настраиваю целевой сервер с помощью простой веб-страницы, которая принимает URL-адрес случайного изображения, а затем записывает сценарии в d/l изображение в определенную папку. –

+0

@Hick Если у вас нет доступа для входа в систему, на которой находятся изображения, вы можете войти в систему «машина B» и вытащить изображение непосредственно с сервера изображений. Я обновил свой ответ с некоторыми деталями. Не уверен, что это то, о чем вы просите. –

Смежные вопросы