2013-08-23 2 views
-1

У меня есть одно требование, когда мне нужно получить доступ к серверу unix, и на этом сервере мне нужно запустить сценарий оболочки с некоторым параметром из моего java-приложения. Пожалуйста, предложите некоторое решение с примером.Доступ к серверу UNIX и запуск сценария оболочки из java-приложения

Я пробовал что-то, но он не работает.

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(); 
    } 

получение null из ssh.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 для удаленного соединения и оболочек команд заклинаний:

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 Это слишком многословие, чем, например, в ruby или python :)

+0

Я пытаюсь запустить утилиту 'FNDLOAD' (уже установленную на сервере) с помощью этого кода. Но это дает мне ошибку 'command not found'. Можете ли вы помочь в выполнении команды '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

, пожалуйста, не просто отправляйте код, не указывая код i детали, способный прояснить ваш код. –

Смежные вопросы