2015-06-06 3 views
-1

Я новичок в Java (я все еще участвую в процессе обучения), поэтому, пожалуйста, я очень благодарен, если ваш ответ содержит подробные шаги, которые я могу выполнить ,Отправка списка команд в список удаленного сервера через ssh с помощью Java с помощью JSch

Вот что я ищу 1) У меня есть список команд в txt-файле. 2) У меня есть список серверов в другом файле. 3) Я хочу, чтобы программа java запрашивала мой SSID userID/password, загружал командный файл и файл сервера. И выполните команды по рассматриваемым серверам. 4) Сохраните вывод в txt-файле на моем локальном компьютере, который я проанализирую позже.

Я смог получить следующую программу Java для входа в систему и запускать несколько замечаний. Но, как вы видите, UID/пароль и один сервер хранятся только в программе, и я только читаю System.out, не записывая вывод в файл.

Пожалуйста, помогите !!!

import java.io.ByteArrayInputStream; 
import java.io.InputStream; 

import com.jcraft.jsch.Channel; 
import com.jcraft.jsch.JSch; 
import com.jcraft.jsch.JSchException; 
import com.jcraft.jsch.Session; 

/** Demonstrates a connection to a remote host via SSH. **/ 
public class JSSH 
{ 
    private static final String user = "UID"; // TODO: Username of ssh account on remote machine 
    private static final String host = "localhost"; // TODO: Hostname of the remote machine (eg: inst.eecs.berkeley.edu) 
    private static final String password = "pass"; // TODO: Password associated with your ssh account 
    private static final String command = "ls -l\n cd Downloads \n ls -l\n"; // Remote command you want to invoke 

public static void main(String args[]) throws JSchException, InterruptedException 
{ 
    JSch jsch = new JSch(); 

    // TODO: You will probably want to use your client ssl certificate instead of a password 
    // jsch.addIdentity(new File(new File(new File(System.getProperty("user.home")), ".ssh"), "id_rsa").getAbsolutePath()); 

    Session session = jsch.getSession(user, host, 22); 

    // TODO: You will probably want to use your client ssl certificate instead of a password 
    session.setPassword(password); 

    // Not recommended - skips host check 
    session.setConfig("StrictHostKeyChecking", "no"); 

    // session.connect(); - ten second timeout 
    session.connect(10*1000); 

    Channel channel = session.openChannel("shell"); 

    // TODO: You will probably want to use your own input stream, instead of just reading a static string. 
    InputStream is = new ByteArrayInputStream(command.getBytes()); 
    channel.setInputStream(is); 

    // Set the destination for the data sent back (from the server) 
    // TODO: You will probably want to send the response somewhere other than System.out 
    channel.setOutputStream(System.out); 

    // channel.connect(); - fifteen second timeout 
    channel.connect(15 * 1000); 

    // Wait three seconds for this demo to complete (ie: output to be streamed to us). 
    Thread.sleep(3*1000); 

    // Disconnect (close connection, clean up system resources) 
    channel.disconnect(); 
    session.disconnect(); 
} 

}

ответ

1

Ниже один способ, но я не проверял, но и поможет вам получить представление.

Вот мой JSSH класс:

import java.io.ByteArrayInputStream; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Properties; 
import java.util.concurrent.TimeUnit; 

import com.jcraft.jsch.Channel; 
import com.jcraft.jsch.JSch; 
import com.jcraft.jsch.JSchException; 
import com.jcraft.jsch.Session; 

public class JSSH { 
    private static final String user = "UID"; 
    private static final String password = "pass"; 

    public static void main(String args[]) throws JSchException, 
     InterruptedException, IOException { 
    JSSH jssh = new JSSH(); 
    JSch jsch = new JSch(); 
    for(String host : jssh.listOfhost()) { 
     Session session = jsch.getSession(user, host, 22); 
     session.setPassword(password); 
     session.setConfig(getProperties()); 
     session.connect(10 * 1000); 
     Channel channel = session.openChannel("shell"); 

     for(String command : jssh.listOfCommand()) { 
      channel.setInputStream(new ByteArrayInputStream(command.getBytes())); 
      channel.setOutputStream(new FileOutputStream(new File(OUTPUT_FILE))); 
      channel.connect(15 * 1000); 
      TimeUnit.SECONDS.sleep(3); 
     } 

     channel.disconnect(); 
     session.disconnect(); 
    } 
} 

private static Properties getProperties() { 
    Properties properties = new Properties(); 
    properties.put("StrictHostKeyChecking", "no"); 
    return properties; 
} 


    private List<String> listOfCommand() throws IOException { 
     return new LineBuilder("command_file.txt").build(); 
    } 

    private List<String> listOfhost() throws IOException { 
     return new LineBuilder("host_file.txt").build(); 
    } 
} 
} 

А вот LineBuilder класс:

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class LineBuilder { 

    private String fileName; 

    public LineBuilder(String fileName) { 
     this.fileName = fileName; 
    } 

    public List<String> build() throws IOException { 
     BufferedReader reader = new BufferedReader(new FileReader(new File(fileName))); 
     List<String> lines = new ArrayList<String>(); 
     String line = null; 
     try { 
      while((line = reader.readLine()) != null) { 
       lines.add(line); 
      } 
     } catch(IOException e) { 
      throw e; 
     } finally { 
      reader.close(); 
     } 
     return lines; 
    } 
} 

Примечание - я удалил комментарии только, чтобы сделать код более четким.

+0

Спасибо, я попробую, но как я могу получить приглашение для UserID/Password вместо того, чтобы оставить в скрипте? – Moe

+0

Кто-нибудь может помочь? – Moe

+0

Я запускал вышеуказанную программу, и она работала нормально. Я тестировал с помощью 'com.jcraft.jsch_0.1.31.jar' – TheCodingFrog

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