
stdout
на одном сервере CentOS необходимо передать stdin
на другой сервер CentOS. Это возможно?
Обновлять
ScottPack, MikeyB и jofel все имеют обоснованные ответы. Я присудил ответ Скотту, потому что, хотя в моем вопросе безопасность не была указана как требование, всегда приятно быть в безопасности. Однако предложения двух других товарищей также сработают.
решение1
Это безоговорочное «да».
Когда кто-то использует ssh
для выполнения команды на удаленном сервере, он выполняет своего рода причудливое внутреннее перенаправление ввода/вывода. На самом деле, я считаю, что это одна из тонко приятных функций OpenSSH. В частности, если вы используете ssh
для выполнения произвольной команды на удаленной системе, то ssh сопоставит STDIN
и STDOUT
с командой, которая выполняется.
Для примера предположим, что вы хотите создать резервную копию tarball, но не хотите или не можете хранить ее локально. Давайте взглянем на этот синтаксис:
$ tar -cf - /path/to/backup/dir | ssh remotehost "cat - > backupfile.tar"
Мы создаем tarball и записываем его в STDOUT
, нормальные вещи. Поскольку мы используем ssh для выполнения удаленной команды, STDIN сопоставляется с STDIN
. cat
Который мы затем перенаправляем в файл.
решение2
Удобный способ передачи данных между хостами, когда вам не нужно беспокоиться о безопасности передачи данных по кабелю, — это использование netcat
на обоих концах соединения.
Это также позволяет вам настраивать их асинхронно:
На «приемнике» (на самом деле у вас будет двусторонняя связь, но проще думать об этом так) выполните:
nc -l -p 5000 > /path/to/backupfile.tar
А на «отправителе» выполните:
tar cf - /path/to/dir | nc 1.2.3.4 5000
решение3
Очень мощный инструмент для создания одно- и двунаправленных соединений - этоsocat
. Для краткого обзора возможностей, посмотрите примеры в егостраница руководства.
Он netcat
полностью заменяет и аналогичные инструменты и имеет поддержку для шифрованных соединений ssl. Для новичков это может быть не так просто, но по крайней мере хорошо знать, что это существует.
решение4
Попробуйте поместить свой открытый ключ SSH на другой хост всего одной командой
ssh [email protected] 'cat >> .ssh/authorized_keys' < .ssh/id_rsa.pub