2011-10-31 37 views
6

Tôi có hai máy chủ Linux bảo mật. Trong một máy, ứng dụng Java của tôi đang chạy. Tôi cần chạy các lệnh Linux trên máy thứ hai từ máy đầu tiên trong Java. Làm thế nào tôi có thể làm điều này?Làm cách nào để thực thi các lệnh Linux trên máy từ xa bằng Java?

+0

Ổ cắm là điều đầu tiên xuất hiện trong đầu bạn. http://download.oracle.com/javase/tutorial/networking/sockets/ – Adam

Trả lời

4

Về cơ bản, bạn cần phải mở kết nối ssh với máy chủ khác từ bên trong ứng dụng Java của bạn. Trang web OpenSSH có một số thông tin hữu ích về các thư viện sẽ cung cấp cho bạn hỗ trợ ssh trong Java.

Có vẻ như Ganymed SSH-2 for Java là lựa chọn tốt nhất ở đó, nhưng tôi chưa sử dụng bất kỳ thứ gì trong số đó, vì vậy bạn sẽ cần xem xét những gì bạn cần.

Khi bạn có kết nối ssh, bạn sẽ có thể chạy các lệnh giống như khi bạn đăng nhập bằng bất kỳ ứng dụng khách ssh nào khác.

+0

liên kết OpenSSH của bạn không hoạt động –

0

Có thể dễ dàng kiểm tra Ổ cắm hơn, vì bạn có thể làm những gì bạn đang cố gắng làm mà không phải thiết lập bất kỳ thư viện bên ngoài nào.

Trên máy chủ, bạn muốn thiết lập đối tượng ServerSocket và từ máy khách, bạn mở một Ổ cắm. Tôi không có thời gian để viết một ví dụ hoàn chỉnh, nhưng hãy kiểm tra điều này một cách đơn giản để thiết lập kết nối máy chủ lưu trữ trên Internet trong Java.

http://zerioh.tripod.com/ressources/sockets.html

Khi bạn nhận được rằng thiết lập, bạn muốn nhập lệnh shell của bạn từ ServerSocket trên máy tính mà nên thực hiện lệnh, và làm điều gì đó xung quanh dòng

String command = "get this from the ObjectInputStream attached to your ServerSocket"; 
Runtime run = Runtime.getRuntime(); 
Process pr = run.exec(command) ; 
pr.waitFor() ; 
BufferedReader buffer = new BufferedReader(new InputStreamReader(pr.getInputStream())) ; 
String line; 
while ((line = buffer.readLine()) != null) 
{ 
System.out.println(line); 
} 

Các một phần khó khăn là thiết lập một kết nối máy khách-máy chủ có thể thực hiện được với các Ổ cắm, nhưng nếu bạn đang làm một cái gì đó đơn giản, bạn sẽ ổn với ví dụ từ liên kết ở trên.

+0

Bạn thực sự muốn phát minh lại bánh xe và làm lại mọi thứ để bảo đảm kết nối khi bạn có thể sử dụng ssh? – lc2817

+0

Tôi đã đọc sai câu hỏi dưới dạng yêu cầu thực hiện Java. Cảm ơn đã chỉ ra điều đó. –

2

Bạn có thể thực hiện theo một số cách; tuy nhiên, gần như mọi cách liên quan đến kết nối mạng.

Bạn có thể viết cặp chương trình Java máy khách-máy chủ, với kết nối máy khách đến máy chủ và gửi lệnh.

Bạn có thể viết Java để sử dụng máy chủ hiện có, như sshd, telnetd, rsh, ftpd hoặc máy chủ khác đã tồn tại từ trước cho phép các lệnh ở đầu từ xa.

Bạn có thể tận dụng một kiến ​​trúc mà xử lý một số khía cạnh của việc thiết lập một cặp client-server, như RMI, SOAP, CORBA vv

Trong cuối Java hỗ trợ nhiều lựa chọn kết nối mạng, vì vậy bạn có nhiều cách làm điều này hơn bạn nghĩ. Chỉ cần chắc chắn rằng bạn không làm điều đó trong một trình duyệt web, như những JVM được tung ra sandboxed, và bạn không thể có được ra khỏi sandbox mà không cần một số trợ giúp.

8

Jsch (here) cho phép bạn kết nối với máy chủ từ xa bằng SSH và thực thi lệnh shell dễ dàng (và nhiều thứ khác như SCP, SFTP ...). Không có nhiều tài liệu, nhưng bạn có một vài ví dụ triển khai thực sự hữu ích here (và thậm chí là ví dụ về những gì bạn muốn làm here).

Bạn cũng có thể kết hợp Jsch với Expect4j và cách này có kiểm soát tốt hơn trên các lệnh bạn muốn thực thi (ví dụ đẹp here).

+0

+1 cho câu trả lời hoàn hảo .... Cảm ơn rất nhiều –

Các vấn đề liên quan