Uno strumento da riga di comando Unix standard per le tubazioni ad una presa
-
05-09-2019 - |
Domanda
Ho alcune applicazioni e gli strumenti standard Unix che inviano la loro produzione al-named pipe in Solaris, pipe comunque denominate possono essere letti solo dalla memoria locale (su Solaris), quindi non possono accedervi dal attraverso la rete o posizionare i tubi in una memoria NFS per l'accesso in rete per la loro produzione.
Il che mi ha fatto chiedendo se ci fosse un modo analogo a trasmettere l'uscita di strumenti a linea di comando direttamente ai socket, dire qualcosa come:
mksocket mysocket:12345
vmstat 1 > mysocket 2>&1
Soluzione
Netcat è grande per questo. Ecco una pagina rel="noreferrer"> .
Utilizzo per il vostro caso potrebbe essere simile a questo:
-
Server in ascolto per una connessione, quindi invia l'uscita ad esso:
server$ my_script | nc -l 7777
-
client remoto si connette alla
server
sulla porta 7777, riceve i dati, salva in un file di log:client$ nc server 7777 >> /var/log/archive
Altri suggerimenti
netcat
(noto anche come nc
) è esattamente quello che stai cercando. Sta diventando per essere ragionevolmente standard, ma non sono disponibili su tutti i sistemi.
socat
sembra essere una versione rinforzata-up di netcat, con molte più funzioni, ma meno comunemente disponibili.
Su Linux, è anche possibile utilizzare /dev/tcp/<host>/<port>
. Vedere le Guida avanzata di scripting Bash per ulteriori informazioni.
netcat contribuirà a stabilire un tubo attraverso la rete.
Si consiglia di utilizzare uno dei seguenti:
- ssh: sicuro (criptato), già installato out-of-the-box su Solaris - ma è necessario impostare una coppia di chiavi per le sessioni non interattive
- es.
vmstat 2>&1 | ssh -i private.key oss@remote.node "cat >vmstat.out"
- es.
- netcat: semplice da impostare - ma insicura e aperta ad attacchi
Tutti sono sulla strada giusta con netcat. Ma voglio aggiungere che se si sta tubazioni in nc
e in attesa di una risposta, è necessario utilizzare l'opzione -q <seconds>
. Dal manuale:
secondi -q
dopo EOF su stdin, attendere il numero specificato di secondi e quindi chiudere. Se è negativo secondi, aspettare per sempre.
Per esempio, se si desidera interagire con il vostro agente SSH si può fare qualcosa di simile:
echo -en '\x00\x00\x00\x01\x0b' | nc -q 1 -U $SSH_AUTH_SOCK | strings
Un esempio più completo è a https://gist.github.com/RichardBronosky/514dbbcd20a9ed77661fc3db9d1f93e4
* Ho rubato questo da https: //ptspts.blogspot.com/2010/06/how-to-use-ssh-agent-programmatically.html