# Kommunikation zwischen Shell und Putty



## rene-krause (30. Jul 2021)

Ich würde mir gern die Arbeit mit putty durch ein paar selbstgeschriebene Routinen erleichtern, komme aber gerade mal bis zu Anmeldung, also dass die Verbindung steht. Würde aber gern noch ein paar Befehle hinzufügen. In putty würde ich den Login und die Befehle mit Semikolon trennen, wird aber von der Shell nicht akzeptiert.
Hab mich ein bisschen belesen und meist wird die JSch Java API für den Umgang mit SSH empfohlen, aber müsste doch auch mit Runtime klappen.
Vielleicht kann mir jemand bei diesen Problem helfen.
Danke

Hier der von mir verwendete Code
[CODE lang="java" title="putty über Runtime"]import java.io.*;
public class test{
   public static void main(String args[]){     
          test td=new test();
          td.sub();     
   }
   public void sub(){
      try {
          Runtime.getRuntime().exec("cmd /c putty.exe -ssh -l user XXX.XXX.XXX.XXX");
      }catch (IOException ex){}
   }
}[/CODE]


----------



## kneitzel (30. Jul 2021)

Putty ist eine UI Applikation. Also müsstest Du genau diese automatisieren. Aber das macht absolut keinen Sinn, denn:

a) Wenn Du ssh machen willst aus Deiner Java Applikation, dann nutz eine Library dazu, z.B. http://www.jcraft.com/jsch/

b) Wenn Du unbedingt bestehende Software nutzen willst, dann nutz eine Kommandozeilen-Version. openssh Client gibt es auch unter Windows. Da könntest Du dann den Prozess starten und über die Standard Streams des Prozesses Eingaben tätigen und die Ausgabe auswerten. Ist aber immer noch sehr blöd, da den Status richtig mit zu bekommen und Fehler zu behandeln. Daher würde ich immer zu a) neigen.


----------



## Thallius (30. Jul 2021)

Was genau soll denn das Ergebnis deiner Arbeit sein? Willst du auf zig Servern das gleiche Script laufen lassen oder was? Ich sehe im Moment nicht wirklich einen Sinn in dieser Anwendung. Du kannst genauso gut einfach mit einem Click eine Verbindung via Putty machen und dort dann ein Script starten das die Arbeit macht. Finde ich auch wesentlich logischer irgendwie.


----------



## rene-krause (6. Aug 2021)

Hallo

Sorry, dass ich nicht gleich geantwortete habe. IMO wenig Zeit.
Das mit den zig Servern ist genau das Problem. Login bei Putty geht, aber jeder weitere Befehl den ich über das CMD Richtung Putty sende, startet erneut das Programm. Deswegen habe ich nach einen Trennzeichen nach den Login-Befehlen gefragt.

Zum besseren Verständnis:
Ich bekomme eine Textdatei mit Putty-Befehlen und möchte nicht jeden Befehl separat eingeben.
Java soll mir das Auslesen der Text-Datei, Login bei Putty und die Befehl-Eingabe bei Putty abnehmen.
Bis zur Befehl-Eingabe bekomm ich es hin 

Ich würde gern diese Zeile Code erweitern wollen.
[CODE lang="java" title="Putty-Login über CMD"]cmd /c putty.exe -ssh -l user XXX.XXX.XXX.XXX[/CODE]

Vielleicht reicht ein Sonderzeichen zum Trennen von Login und der weiteren Befehl-Eingabe.
Wie etwa:
[CODE lang="java" title="Putty-Login über CMD"]cmd /c putty.exe -ssh -l user XXX.XXX.XXX.XXX && echo Hello[/CODE]
mit dem Trennzeichen *&& *oder *;*


----------



## kneitzel (6. Aug 2021)

Hast Du Dir denn die Alternativen einmal angesehen? Wie schon gesagt: Putty ist da aus meiner Sicht sehr schlecht geeignet. 

Man wird da bestimmt noch etwas tricksen können - du musst halt dir && ; und co als Parameter übergeben so dass das cmd dies nicht auswertet sondern es als Parameter zum putty kommt.

Und gerade, wenn die Befehle aus einer Datei geladen werden sollen, kann es sehr problematisch sein, da dort ja ggf. auch ähnliche Dinge sein können.

Generell kannst Du da probieren, die ganze Befehlskette in Quotes zu packen. Ich bin mir jetzt aber nicht sicher, wie das übergeben wird. Wenn putty das wirklich dann als ein Befehl absetzen sollte, dann wäre ein bash -c davor notwendig.

Aber all das macht wirklich wenig Sinn. Gerade da es ja einfach zu verwendende Alternativen gibt.


----------



## Dukel (6. Aug 2021)

Plink (ist im Putty Paket dabei) lässt sich Scripten.
plink -m führt z.B. Befehle aus einer Text Datei remote aus.


----------

