2009-02-23 11 views
15

Tôi có một số ứng dụng, và các công cụ Unix tiêu chuẩn gửi đầu ra của chúng tới các tên có tên trong Solaris, tuy nhiên các đường ống được đặt tên chỉ có thể đọc từ bộ nhớ cục bộ (trên Solaris), vì vậy tôi không thể truy cập chúng từ trên mạng hoặc đặt các đường ống trên bộ lưu trữ NFS để truy cập mạng vào đầu ra của chúng.Một công cụ dòng lệnh Unix chuẩn cho đường ống đến một ổ cắm

nào đã cho tôi tự hỏi, nếu có được một cách tương tự để chuyển tiếp các kết quả của các công cụ dòng lệnh trực tiếp vào ổ cắm, nói điều gì đó như:

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

Trả lời

19

Netcat là điều tuyệt vời cho việc này. Đây là một số page with some common examples.

Cách sử dụng đối với trường hợp của bạn có thể trông giống như thế này:

  1. server lắng nghe cho một kết nối, sau đó gửi ra với nó:

    server$ my_script | nc -l 7777

  2. từ xa client kết nối đến server trên cổng 7777, nhận dữ liệu, lưu vào tệp nhật ký:

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

+0

cảm ơn và cảm ơn các ví dụ! –

+0

nếu "nc -l 7777" không hoạt động, hãy thử "nc -l -p 7777" –

6

netcat sẽ giúp thiết lập một đường ống qua mạng.

3

Bạn có thể muốn sử dụng một trong số:

  1. ssh: an toàn (mã hóa), đã được cài đặt out-of-the-box trên Solaris - nhưng bạn phải thiết lập một cặp khóa cho phi các phiên tương tác
  2. netcat: đơn giản để thiết lập - nhưng không an toàn và mở cửa cho các cuộc tấn công
+0

cảm ơn câu trả lời ssh, trong trường hợp này bảo mật không phải là vấn đề, nhưng tốt để có nó ở đây trong câu hỏi –

14

netcat (còn được gọi là nc) là chính xác những gì bạn' Đang tìm kiếm. Đó là chuẩn hợp lý, nhưng không có sẵn trên tất cả các hệ thống.

socat có vẻ là phiên bản tăng cường của netcat, với nhiều tính năng hơn, nhưng ít phổ biến hơn.

Trên Linux, bạn cũng có thể sử dụng /dev/tcp/<host>/<port>. Xem Advanced Bash-Scripting Guide để biết thêm thông tin.

0

Mọi người đều đi đúng hướng với netcat. Nhưng tôi muốn thêm rằng nếu bạn đang piping thành nc và mong đợi một phản ứng, bạn sẽ cần phải sử dụng tùy chọn -q <seconds>. Từ hướng dẫn:

-q giây

sau EOF trên stdin, chờ đợi số quy định của giây và sau đó bỏ thuốc lá.Nếu giây là tiêu cực, hãy đợi mãi.

Ví dụ, nếu bạn muốn tương tác với Agent SSH của bạn, bạn có thể làm một cái gì đó như thế này:

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

Một ví dụ hoàn chỉnh hơn là tại https://gist.github.com/RichardBronosky/514dbbcd20a9ed77661fc3db9d1f93e4

* Tôi lấy trộm này từ https://ptspts.blogspot.com/2010/06/how-to-use-ssh-agent-programmatically.html