2009-02-23 8 views
15

J'ai des applications et des outils Unix standard qui envoient leur sortie vers des tubes nommés dans Solaris, mais les tubes nommés ne peuvent être lus qu'à partir du stockage local (sous Solaris), donc je ne peux pas y accéder à partir du réseau ou placer les tuyaux sur un stockage NFS pour l'accès en réseau à leur sortie.Un outil de ligne de commande Unix standard pour acheminer vers un socket

Ce qui m'a demander s'il y avait une manière analogue à transmettre la sortie d'outils de ligne de commande directement à des prises, dire quelque chose comme:

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

Répondre

19

Netcat est idéal pour cela. Voici un page with some common examples.

Utilisation pour votre cas pourrait ressembler à ceci:

  1. serveur pour une connexion, puis envoie la sortie à elle:

    server$ my_script | nc -l 7777

  2. client distant se connecte à server sur le port 7777, reçoit des données, enregistre dans un fichier journal:

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

+0

merci, et merci pour les exemples! –

+0

si "nc -l 7777" ne fonctionne pas essayez "nc -l -p 7777" –

6

netcat aidera à établir un tuyau sur le réseau.

3

Vous pouvez utiliser l'un des:

  1. ssh: sécurisé (crypté), déjà installé hors-the-box sur Solaris - mais vous devez mettre en place une paire de clés pour non sessions interactives
  2. netcat: simple à mettre en place - mais peu sûr et ouvert aux attaques
+0

merci pour la réponse ssh, dans ce cas la sécurité n'est pas un problème, mais il est bon de l'avoir ici dans la question –

14

netcat (également connu sous le nom nc) est exactement ce que vous re cherche. Cela devient raisonnablement standard, mais pas disponible sur tous les systèmes.

socat semble être une version renforcée de netcat, avec beaucoup plus de fonctionnalités, mais moins souvent disponibles. Sous Linux, vous pouvez également utiliser /dev/tcp/<host>/<port>. Voir le Advanced Bash-Scripting Guide pour plus d'informations.

0

Tout le monde est sur la bonne voie avec netcat. Mais je tiens à ajouter que si vous faites pipi dans nc et attendez une réponse, vous devrez utiliser l'option -q <seconds>. A partir du manuel:

-q secondes

après EOF sur stdin, attendez le nombre de secondes puis quittez.Si les secondes sont négatives, attendez toujours.

Par exemple, si vous voulez interagir avec votre agent SSH, vous pouvez faire quelque chose comme ceci:

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

Un exemple plus complet est à https://gist.github.com/RichardBronosky/514dbbcd20a9ed77661fc3db9d1f93e4

* J'ai gagné ce billet depuis https://ptspts.blogspot.com/2010/06/how-to-use-ssh-agent-programmatically.html

Questions connexes