2013-08-23 24 views
-1

我有一個要求,即必須訪問unix服務器,並且在該服務器上,我必須使用我的Java應用程序中的某些參數運行shell腳本。 請用示例提出一些解決方案。訪問UNIX服務器並從java應用程序運行shell腳本

我已經嘗試了一些東西,但它不工作。

SshWrapper ssh = new SshWrapper(); 
try { 
     ssh.connect("10.206.19.80", 22); 
     ssh.login("*****","*****"); 

     ssh.setPrompt("c898vqz:~"); 
     ssh.waitfor("#"); 
     System.out.println("PWD**********"+ssh.send("pwd")); 

     ssh.disconnect(); 
     System.out.println(ssh.getClass()); 
    } catch (java.io.IOException e) { 
     e.printStackTrace(); 
    } 

越來越nullssh.send("pwd")

+0

[執行外殼腳本從Java空的參數]的可能重複(http://stackoverflow.com/questions/6098308/executing-a-shell-script-with -an-empty-argument-from-java) – sanbhat

+0

有沒有人有任何解決方案,而不是投下這個問題。如果您需要我準備提供的任何其他信息。 – Shibankar

+0

@AniketThakur:請參考我的更新。 – Shibankar

回答

1

你可以使用SSH組件JCraft遠程連接和shell命令調用:

import com.jcraft.jsch.* 

Exerp從我的舊代碼:

JSch jsch = new JSch(); 

String command = "/tmp/myscript.sh"; 
Session session = jsch.getSession(user, host, 22); 
session.connect(); 

Channel channel = session.openChannel("exec"); 
((ChannelExec)channel).setCommand(command); 

channel.setInputStream(null); 
((ChannelExec)channel).setErrStream(System.err); 
InputStream in = channel.getInputStream(); 
channel.connect(); 

byte[] tmp = new byte[1024]; 
while (true) { 
    while (in.available() > 0) { 
     int i = in.read(tmp, 0, 1024); 
     if (i < 0) { 
      break; 
     } 
     System.out.print(new String(tmp, 0, i)); 
    } 
    if (channel.isClosed()) { 
     if (channel.getExitStatus() == 0) { 
      System.out.println("Command executed successully."); 
     } 
     break; 
    } 
} 
channel.disconnect(); 
session.disconnect(); 

您還可以通過session.openChannel("sftp")輕鬆傳輸文件。

ooph .. in java它太羅嗦了,在rubypython :)

+0

我試圖運行'FNDLOAD'實用程序(已安裝在服務器上)使用此代碼。但它給了我'命令未找到'錯誤。你可以幫助運行'FNDLOAD'命令。 –

0
JSch js = new JSch(); 
Session s = js.getSession("username", "ip", port); 
s.setPassword("password"); 
Properties config = new Properties(); 
config.put("StrictHostKeyChecking", "no"); 
s.setConfig(config); 
s.connect(); 
System.out.println("connection "); 
Channel c = s.openChannel("sftp"); 
ChannelSftp ce = (ChannelSftp) c; 

ce.connect(); 
System.out.println("connection "); 
ce.disconnect(); 
s.disconnect(); 
+1

請不要只是發佈代碼,而不指定代碼我的詳細信息能夠澄清你的代碼。 –

相關問題