# SSH mit Jsch, mehrere Befehle senden



## Benjamin87 (9. Aug 2011)

Hallo,

ich versuche mit Jsch über SSH mehrere Befehle auszuführen. Leider finde ich außer Beispiel-Code keinerlei Dokumentation für Jsch ( Wenn jemand eine gute Dokumentation gefunden hat, möge er sich bitte melden ;-) ) .

Die Session ist connected und ich bin bereit um Befehle abzusenden, nur leider weiß ich nicht wie?

Folgendes habe ich bereits umgesetzt (lediglich ein Auszug):


```
...
	      session.connect();     
	      Channel channel=session.openChannel("shell");
	      InputStream in=channel.getInputStream();
	      OutputStream out =channel.getOutputStream();
	      channel.connect();     
	      
	      out.write(("eserver1 stop").getBytes());
	      out.write(("\n").getBytes());
	      out.flush();    
	      
    
	      out.write(("su - isas1").getBytes());
	      out.write(("\n").getBytes());
	      out.flush();
	      
	      
	      out.write(("cd /eserver1/tools/misc").getBytes());
	      out.write(("\n").getBytes());
	      out.flush();
	      
	      
	      out.write(("ant import").getBytes());
	      out.write(("\n").getBytes());
	      out.flush();
	      
      
	      out.write(("exit").getBytes());
	      out.write(("\n").getBytes());
	      out.flush();	      
      
	      out.write(("eserver1 start").getBytes());
	      out.write(("\n").getBytes());
	      out.flush();	
...
```

1. Ist das soweit korrekt?
2. Wie kann ich sehen z.b. in der Console was gerade passiert?
3. das "ant import" benötigt lange, allerdings habe ich das Gefühl, dass er direkt zum nächsten Befehl geht und nicht genügend Zeit lässt um den letzten Befehl auszuführen?
4. Wie könnte ich es vielleicht besser erreichen?

Ich bin dankbar für jegliche Anregung oder Hilfestellung!


----------



## HoaX (9. Aug 2011)

Benjamin87 hat gesagt.:


> 1. Ist das soweit korrekt?
> 2. Wie kann ich sehen z.b. in der Console was gerade passiert?
> 3. das "ant import" benötigt lange, allerdings habe ich das Gefühl, dass er direkt zum nächsten Befehl geht und nicht genügend Zeit lässt um den letzten Befehl auszuführen?
> 4. Wie könnte ich es vielleicht besser erreichen?



2. wenn 1 richtig ist, dann einfach "in" auslesen?!


----------



## Benjamin87 (9. Aug 2011)

Okay, das ganze scheint zu funktionieren.
Ich habe nach jedem flush ein:


```
while(in.available()>0){
		          int i=in.read(tmp, 0, 1024);
		          if(i<0)break;
		          System.out.print("INPUT 11: " + new
		String(tmp, 0, i));
		        }
```

Allerdings habe ich das problem, dass "ant import" zwischendurch nichts ausgibt für ne längere Zeit und er deshalb nichts lesen kann und zum nächsten befehl geht. Ich möchte gerne irgendwie überprüfen wann der befehl zuende ist, geht das?


----------



## Benjamin87 (9. Aug 2011)

Okay ich habe das ganze jetzt so gelöst, indem ich überprüfe wann das Ende kommt, also die letzte Ausgabe vom ant import nämlich "Total time: 2 minutes 8 seconds" . Ist aber sicherlich keine schöne Lösung, wenn jemand bessere Ideen hat, bitte melden, würde mich freuen.


```
out.write(("ant import").getBytes());
			out.write(("\n").getBytes());
			out.flush();
			Boolean run = true;
			while(run)
			{
			while (in.available() > 0) {
				int i = in.read(tmp, 0, 1024);
				if (i < 0)
					break;
				String test = new String(tmp, 0, i);
				if(test.contains("Total time:")) run = false;
				System.out.print(test);
			}
			}
```


----------



## jypdtonga (26. Aug 2011)

ja mache einfach nach deinem befehl zusätzlich ein

echo "delimiter"

und prüfe auf der vorkommen dieses delimiters


----------

