как автоматизировать отправку команд с использованием SSH factory - PullRequest
1 голос
/ 11 марта 2012

Я использую ssh factory для автоматизации входа в систему. Я должен автоматизировать вход в систему до 4 шлюзов, отправлять команды и получать выходные данные. Я успешно автоматизировал до 3 шлюзов. Теперь мне нужно запустить команду "telnet remote_ip", чтобы войти в 4-й шлюз. Где я использую сеансы telnet только для этого 4-го шлюза, так как мне нужно запустить «telnet ip», так как он использует протокол telnet здесь. Но для предыдущих 3-х шлюзов я использовал ssh-сессии. Но эта команда "telnet ip" не запускается. Может ли кто-нибудь1 помочь мне с этим?

Below is the code, where i am trying to automate it.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Scanner;

import com.jscape.inet.ssh.Ssh;
import com.jscape.inet.ssh.SshAdapter;
import com.jscape.inet.ssh.SshConnectedEvent;
import com.jscape.inet.ssh.SshDataReceivedEvent;
import com.jscape.inet.ssh.SshDisconnectedEvent;
import com.jscape.inet.ssh.SshException;
import com.jscape.inet.ssh.SshScript;
import com.jscape.inet.ssh.SshSession;
import com.jscape.inet.ssh.SshTask;
import com.jscape.inet.ssh.connection.channels.SessionClient;
import com.jscape.inet.ssh.connection.channels.SessionRequests;
import com.jscape.inet.ssh.util.SshParameters;
import com.jscape.inet.telnet.Telnet;
import com.jscape.inet.telnet.TelnetException;
import com.jscape.inet.telnet.TelnetListener;
import com.jscape.inet.telnet.TelnetScript;
import com.jscape.inet.telnet.TelnetSession;
import com.jscape.inet.telnet.TelnetTask;

public class SshScriptTutorial extends SshAdapter {
   public SshScriptTutorial() {}

   public void executeSshScript(String hostname, String username, String password)
      throws SshException, IOException, InterruptedException, TelnetException
   {
      // assumes that SSH shell prompt is ">" .. this MUST match exactly 
      String shellPrompt = ">";
      String shellPrompt1 = ":";

      // initialize and create new Ssh instance
      SshParameters sshParams = new SshParameters(hostname,username,password);
      Ssh ssh = new Ssh(sshParams);

      // register this class to receive Ssh events
      ssh.addSshListener(this);

      // create new script object and bind to the given ssh object
      SshScript script = new SshScript(ssh);

      // add tasks to script object
      script.addTask(new SshTask(shellPrompt, "show host", shellPrompt));
      script.addTask(new SshTask(shellPrompt, "ssh ssgpun", shellPrompt1)); // 2nd g/w 
      script.addTask(new SshTask(shellPrompt1, "password", shellPrompt));

      script.addTask(new SshTask(shellPrompt, "net ip", shellPrompt1)); // 3rd gateway
      script.addTask(new SshTask(shellPrompt1, "username", shellPrompt1));
      script.addTask(new SshTask(shellPrompt1, "password", shellPrompt));

 // till this it is working

      // connect to SSH server and execute script
      ssh.connect();

      // wait until last task is complete
      while(!script.isComplete()) {
         try {
            Thread.sleep(500);
         } catch(Exception e) {
             System.err.println(e.getMessage());
         }
      }

      // disconnect from server
//      ssh.disconnect();

// ** Здесь я пытаюсь получить доступ к последнему удаленному серверу, используя команду "telnet ip", используя сеанс telnet, поскольку он использует протокол telnet. Но это не увольнение самой команды. Так, кто-нибудь может мне помочь в этом. Как это сделать? ... Я даже пытался использовать ssh для этого "telnet ip", а также для имени пользователя и пароля. Если я использую сессию ssh для этого 4-го шлюза, я могу автоматизировать только "telnet ip", и он запрашивает имя для входа, а имя для входа не автоматизировано. Итак, я пробовал как ssh сессии, так и telnet сессии Я не знаю, в чем проблема или как ее решить.

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

// **

      // create new Telnet instance
      Telnet telnet = new Telnet("10.228.128.33");

   // create new TelnetScript instance and bind to Telnet instance
      TelnetScript script_t = new TelnetScript(telnet);

   // create a task that waits for login prompt and submits username
      TelnetTask username_t = new TelnetTask(shellPrompt1,"switchind", shellPrompt1);

   // create task that waits for password prompt and submits password
      TelnetTask password_t = new TelnetTask(shellPrompt1, "Indore123", shellPrompt);

   // add tasks to script
      script_t.addTask(username_t);
      script_t.addTask(password_t);

   // connect to telnet server … script is executed automatically
      telnet.connect();
   }

   public void connected(SshConnectedEvent event) {
      System.out.println("Connected to host: " + event.getHost());
   }

   public void disconnected(SshDisconnectedEvent event) {
      System.out.println("Disconnected from host: " + event.getHost());
   }

   public void dataReceived(SshDataReceivedEvent event) {
       System.out.print(event.getData());
   }  

   public static void main(String[] args) 
   {
      try 
      {
         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

         String hostname = "host_ip";
         String username = "username";

         System.out.print("Enter password: ");
         String password = reader.readLine();            

         SshScriptTutorial tutorial = new SshScriptTutorial();
         tutorial.executeSshScript(hostname, username, password);

      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...