Как делают меня scp (огромный) вывод команды непосредственно к удаленной машине?

Обратите внимание, что я не могу сначала хранить файл локально - это является слишком большим.

Эта (неприятная) страница (прокрутка полностью к нижней части), кажется, дает ответ, но я испытываю затруднения при распутывании части, это характерно для ленточных накопителей:

http://webcache.googleusercontent.com/search?q=cache:lhmh960w2KQJ:www.experts-exchange.com/OS/Unix/SCO_Unix/Q_24249634.html+scp+redirect&cd=3&hl=en&ct=clnk&gl=us

Для создания этого более конкретным вот то, как Вы думали бы, что это могло бы работать:

На локальной машине:

% echo "pretend this string is a huge amt of data" | scp - remote.com:big.txt

(Это использует конвенцию - который scp на самом деле не поддерживает - заменения тире для исходного файла, чтобы сказать ей получать ее от stdin вместо этого.)

51
задан 28.07.2014, 11:53

4 ответа

Используйте nc (Net Cat), которая не должна сохранить файл локально.

4
ответ дан 07.12.2019, 08:28

Используйте канал FIFO:

mknod mypipe p
scp mypipe destination &
ls > mypipe
2
ответ дан 07.12.2019, 08:28

можно подключиться к ssh и выполнить удаленную команду. В этом случае, удаленной командой будет cat > big.txt, который скопирует stdin в файл big.txt.

echo "Lots of data" | ssh user@example.com 'cat > big.txt'

Это легко и просто, при условии, что Вы можете использовать ssh для соединения с удаленным концом.

Вы также можете использовать nc (NetCat) для передачи данных. На принимающем устройстве (например, host.example.com):

nc -l 1234 > big.txt

Это настроит nc на прослушивание порта 1234 и копирование всего, что отправляется на этот порт, в файл big.txt. Затем, на посылающей машине:

echo "Lots of data" | nc host.example.com 1234

Эта команда скажет nc на посылающей стороне подключиться к порту 1234 на приемнике и скопировать данные из stdin по сети.

Однако, решение nc имеет несколько недостатков:

  • Нет никакой аутентификации; любой может подключиться к порту 1234 и отправить данные в файл.
  • Данные не зашифрованы, как это было бы с ssh.
  • Если любая из машин находится за брандмауэром, то выбранный порт должен быть открыт, чтобы соединение прошло и было маршрутизировано должным образом, особенно на принимающем конце.
  • Оба конца должны быть настроены независимо и одновременно. С помощью решения ssh вы можете инициировать передачу только с одной из конечных точек.
77
ответ дан 07.12.2019, 08:28

С помощью ssh:

echo "pretend this is a huge amt of data" | ssh user@remote.com 'cat > big.txt'
15
ответ дан 07.12.2019, 08:28

Теги

Похожие вопросы