Стандартный инструмент командной строки Unix для подключения к сокету

У меня есть некоторые приложения и стандартные инструменты Unix, отправляющие свой вывод в named-pipe в Solaris, однако именованные каналы могут быть прочитаны только из локального хранилища (в Solaris), поэтому я не могу получить к ним доступ из сети или поместите трубы в хранилище NFS для сетевого доступа к их выходу.

Что заставило меня задаться вопросом, был ли аналогичный способ перенаправления вывода инструментов командной строки непосредственно в сокеты, скажем что-то вроде:

mksocket mysocket:12345
vmstat 1 > mysocket 2>&1

Ответы

Ответ 1

Netcat отлично подходит для этого. Здесь страница с некоторыми распространенными примерами.

Использование для вашего случая может выглядеть примерно так:

  • Сервер прослушивает соединение, затем отправляет на него вывод:

    server$ my_script | nc -l 7777

  • Удаленный клиент подключается к server на порту 7777, получает данные, сохраняет файл журнала:

    client$ nc server 7777 >> /var/log/archive

Ответ 2

netcat (также известный как nc) именно то, что вы ищете. Это становится достаточно стандартным, но недоступным для всех систем.

socat, похоже, является обновленной версией netcat с большим количеством функций, но менее распространенным.

В Linux вы также можете использовать /dev/tcp/<host>/<port>. Дополнительную информацию см. В Advanced Bash -Scripting Guide.

Ответ 3

netcat поможет установить канал по сети.

Ответ 4

Возможно, вы захотите использовать один из:

  • ssh: безопасный (зашифрованный), уже установленный из коробки на Solaris, но вам нужно настроить пару ключей для неинтерактивных сеансов
  • netcat: простой в настройке - но небезопасный и открытый для атак

Ответ 5

Каждый находится на правильном пути с netcat. Но я хочу добавить, что если вы подключаетесь к nc и ожидаете ответа, вам нужно будет использовать опцию -q <seconds>. Из руководства:

-q секунд

после EOF на stdin, подождите указанное количество секунд и затем закройте. Если секунды отрицательные, подождите бесконечно.

Например, если вы хотите взаимодействовать с вашим агентом SSH, вы можете сделать что-то вроде этого:

echo -en '\x00\x00\x00\x01\x0b' | nc -q 1 -U $SSH_AUTH_SOCK | strings

Более полный пример: https://gist.github.com/RichardBronosky/514dbbcd20a9ed77661fc3db9d1f93e4

* Я украл это из https://ptspts.blogspot.com/2010/06/how-to-use-ssh-agent-programmatically.html