2010-02-08 39 views
5

Tôi về cơ bản đang cố gắng viết một lệnh giống như pstree ngoại trừ việc nó phải theo các tiến trình trên các máy.Thực hiện theo các pids trên các máy (ssh)

Những gì tôi có nghĩa là nếu tôi chạy này:

$ ssh $node sleep 1000 

Sau đó lệnh sẽ hiển thị một cái gì đó như thế này:

ssh $node -- ($node) sleep 1000 

Và nếu tôi đang chạy:

$ ssh $node ssh $node sleep 1000 

ssh $node---($node) ssh $node---($node) sleep 1000 

Và cứ thế ...

Câu hỏi của tôi là: Làm thế nào tôi có thể ánh xạ một phiên ssh trên một máy đến một quá trình sinh ra trên một máy khác?

Quy trình cha-con cục bộ không phải là vấn đề, nhưng làm cách nào tôi có thể tìm ra lệnh ssh nào trên một nút đã kích hoạt quá trình khác trên nút khác.

  1. Linux 2.6.18

  2. chỉ OpenSSH cho các công cụ "từ xa". Đang chạy OpenSSH_4.3p2 hiện tại.

  3. Truy cập SSH vào tất cả các nút của khóa học (khóa dựa trên auth) để ps và netstat khả dụng từ tất cả các nút.

  4. "Hacks" chỉ dành cho Linux là tốt, không cần phải di động mặc dù đó sẽ là tiền thưởng bổ sung của khóa học.

  5. Người dùng sẽ luôn như cũ và lệnh/tập lệnh của tôi đang chạy với tư cách người dùng đó. Người dùng đó không phải là root.

  6. Không cần phải nhanh chóng, chỉ chính xác.

Các giải pháp tự phát sẽ được để viết một bản sao pstree, kích hoạt trên chuỗi lệnh "ssh", con số ra nguồn cổng và sau đó đi vào máy từ xa trong câu hỏi và số liệu ra mà một trong sshd Những đứa trẻ được sinh ra bởi lệnh đặc biệt này.

Nhưng có thể có cách thông minh hơn? : P

+0

Tôi không hiểu đầy đủ câu hỏi. bạn có ý gì với 'lập bản đồ' một phiên ssh? bạn có muốn đặt tên cho phiên ssh của mình không? (Sau đó màn hình ứng dụng thoải mái sẽ là con trỏ của tôi vào dung dịch) – Karussell

+0

Tôi muốn để lập bản đồ quá trình id của lệnh: "ssh $ node ngủ 1000" để đến quá trình id của lệnh: "ngủ 1000" trên máy từ xa (nút $). – user268744

Trả lời

1

Thực ra, tôi nghĩ giải pháp tự phát của bạn là đúng cách để thực hiện: sử dụng netstat để lấy cổng nguồn và tìm trên máy từ xa. Bạn có thể gặp khó khăn khi sử dụng "netstat -p" mà không phải root - tôi đã thử nó trên hai máy, một trong số đó rất vui khi chỉ cho tôi các quy trình của riêng tôi và một quá trình không phải là.

Cũng như các ứng dụng khách ssh, bạn có thể mở rộng điều này để tìm kiếm các máy khách khác sử dụng kết nối ssh, như rsync hoặc Mercurial. Chỉ cần cẩn thận không để theo dõi đệ quy của riêng chương trình của bạn đệ quy!

Một thử nghiệm nhanh với trình netstat và pstree cho thấy rằng ý tưởng này là âm thanh:

[email protected]:~$ netstat -p 
(Not all processes could be identified, non-owned process info 
will not be shown, you would have to be root to see it all.) 
Active Internet connections (w/o servers) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name 
tcp  0  0 mymachine.example:43681 remote.example.com:ssh ESTABLISHED 27044/ssh 
tcp  0  0 mymachine.example:39228 remote.example.com:ssh ESTABLISHED 14499/ssh 
tcp  0  0 mymachine.example:45814 remote.example.com:ssh ESTABLISHED 20899/ssh 
[email protected]:~$ ssh remote netstat -p | grep mymachine.example:43681 
tcp  0  0 remote.example.com:ssh mymachine.example:43681 ESTABLISHED 10361/1 
[email protected]:~$ ssh remote pstree -a 10361 
sshd 
    `-grep -n -e wotsit -i -R /local/home/me/somewhere /dev/null 

Tôi muốn được quan tâm để xem kết quả, bởi vì nó sẽ rất hữu ích với tôi!