SSH Client

danja95

Mitglied
Hallo Leute,
ich bin relativ ungeübt in Java und möchte mal auch damit anfangen :)

Und zwar wollte ich einen SSH Client mir selber erstellen, so als Übung.

Java:
/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */
/**
 * This program enables you to connect to sshd server and get the shell prompt.
 *   $ CLASSPATH=.:../build javac Shell.java 
 *   $ CLASSPATH=.:../build java Shell
 * You will be asked username, hostname and passwd. 
 * If everything works fine, you will get the shell prompt. Output may
 * be ugly because of lacks of terminal-emulation, but you can issue commands.
 *
 */
import com.jcraft.jsch.*;
import com.jcraft.jsch.jce.*;
import com.jcraft.jsch.jcraft.*;
import com.jcraft.jsch.jgss.*;
import com.jcraft.jsch.DHG1;
import com.jcraft.jsch.jce.DH;
import com.jcraft.jsch.jce.SHA1;
import com.jcraft.jsch.jce.SignatureRSA;
import com.jcraft.jsch.jce.MD5;
import com.jcraft.jsch.jce.TripleDESCBC;
import com.jcraft.jsch.jce.HMACMD5;
import java.awt.*;
import javax.swing.*;

public class Shell{
  public static void main(String[] arg){
    
    try{
      JSch jsch=new JSch();
      
      //jsch.setKnownHosts("/home/foo/.ssh/known_hosts");
      
      String host=null;
      if(arg.length>0){
        host=arg[0];
      }
      else{
        //System.getProperty("user.name")
        host=JOptionPane.showInputDialog("Enter username@hostname",
        "root" + "@10.10.7.1"); 
      }
      String user=host.substring(0, host.indexOf('@'));
      host=host.substring(host.indexOf('@')+1);
      
      Session session=jsch.getSession(user, host, 22);
      
      String passwd = JOptionPane.showInputDialog("Enter password");
      session.setPassword(passwd);
      
      UserInfo ui = new MyUserInfo(){
        public void showMessage(String message){
          JOptionPane.showMessageDialog(null, message);
        }
        public boolean promptYesNo(String message){
          Object[] options={ "yes", "no" };
          int foo=JOptionPane.showOptionDialog(null, 
          message,
          "Warning", 
          JOptionPane.DEFAULT_OPTION, 
          JOptionPane.WARNING_MESSAGE,
          null, options, options[0]);
          return foo==0;
        }
        
        // If password is not given before the invocation of Session#connect(),
        // implement also following methods,
        //   * UserInfo#getPassword(),
        //   * UserInfo#promptPassword(String message) and
        //   * UIKeyboardInteractive#promptKeyboardInteractive()
        
      };
      
      session.setUserInfo(ui);
      
      // It must not be recommended, but if you want to skip host-key check,
      // invoke following,
      // session.setConfig("StrictHostKeyChecking", "no");
      
      //session.connect();
      session.connect(30000);   // making a connection with timeout.
      
      Channel channel=session.openChannel("shell");
      
      // Enable agent-forwarding.
      //((ChannelShell)channel).setAgentForwarding(true);
      
      channel.setInputStream(System.in);
      /*
      // a hack for MS-DOS prompt on Windows.
      channel.setInputStream(new FilterInputStream(System.in){
      public int read(byte[] b, int off, int len)throws IOException{
      return in.read(b, off, (len>1024?1024:len));
      }
      });
      */
      
      channel.setOutputStream(System.out);
      
      /*
      // Choose the pty-type "vt102".
      ((ChannelShell)channel).setPtyType("vt102");
      */
      
      /*
      // Set environment variable "LANG" as "ja_JP.eucJP".
      ((ChannelShell)channel).setEnv("LANG", "ja_JP.eucJP");
      */
      
      //channel.connect();
      channel.connect(3*1000);
    }
    catch(Exception e){
      System.out.println(e);
    }
  }
  
  public static abstract class MyUserInfo
  implements UserInfo, UIKeyboardInteractive{
    public String getPassword(){ return null; }
    public boolean promptYesNo(String str){ return false; }
    public String getPassphrase(){ return null; }
    public boolean promptPassphrase(String message){ return false; }
    public boolean promptPassword(String message){ return false; }
    public void showMessage(String message){ }
    public String[] promptKeyboardInteractive(String destination,
    String name,
    String instruction,
    String[] prompt,
    boolean[] echo){
      return null;
    }
  }
}

habe JSCH benutzt aber egal wie oft ich das richtige Passwort benutze ich bekomme nur noch stumpf:
com.jcraft.jsch.JSchException: Auth fail

Habe die selben daten mal in Putty getestet jedoch ohne erfolg.


Optional: Wüsste jemand wie man die Ausgaben in einer GUI form halten kann und nicht im CMD fenster?


Gruß Daniel
 

Joose

Top Contributor
Und zwar wollte ich einen SSH Client mir selber erstellen, so als Übung.

habe JSCH benutzt aber egal wie oft ich das richtige Passwort benutze ich bekomme nur noch stumpf:
com.jcraft.jsch.JSchException: Auth fail

Habe die selben daten mal in Putty getestet jedoch ohne erfolg.

Wenn du es üben willst dann solltest du auch passende Logindaten verwenden.
Schau dass der Login über Putty funktioniert, wenn ja dann probiere es bei deinem Client!
Wenn es schon bei Putty fehlschlägt warum glaubst du sollte es dann bei deinem funktionieren?


Optional: Wüsste jemand wie man die Ausgaben in einer GUI form halten kann und nicht im CMD fenster?

Ich würde anfangs einfach alles über die Konsole eingeben (bzw. ausgeben) lassen. GUI kann man immer noch einfügen sobald mal ein Grundgerüst der Logik steht. Außerdem ist dadurch die Trennung von Logik und GUI einfacher realisierbar ;)
 

danja95

Mitglied
Wenn du es üben willst dann solltest du auch passende Logindaten verwenden.
Schau dass der Login über Putty funktioniert, wenn ja dann probiere es bei deinem Client!
Wenn es schon bei Putty fehlschlägt warum glaubst du sollte es dann bei deinem funktionieren?




Ich würde anfangs einfach alles über die Konsole eingeben (bzw. ausgeben) lassen. GUI kann man immer noch einfügen sobald mal ein Grundgerüst der Logik steht. Außerdem ist dadurch die Trennung von Logik und GUI einfacher realisierbar ;)

Ich muss mich entschuldigen! :D habe mich vertippt und meinte MIT erfolg. Habe dieses Problem beheben können ich dem ich mir statt der ZIP die JAR geladen habe und richtig eingebunden habe im Java Editor.

Ok, habe das mal so hinbekommen, aber der gibt mir die Ausgabem im Javaeditor fester raus. Möchte ein seperates fenster das Input auch verarbeiten kann und Tastenkombinationen. Wäre sowas möglich?
 

Joose

Top Contributor
Ja so etwas wäre möglich, für den Anfang aber einfach zuviel.

Arbeite mit der Konsole des Java Editors (wenn diese wie bei Eclipse funktioniert), dort kannst du den Output ebenfalls selbst darstellen lassen (Textform) und auch Eingaben tätigen.
Danach kann man sich langsam an eine GUI rantasten.
 

Joose

Top Contributor
Auf die Konsole schreiben:
Java:
public void printToConsole(String text){
   System.out.println(text);
}

Von der Konsole lesen:

Java:
public class ReadConsoleScanner {
  public static void main(String[] args) {
    System.out.println("Enter something here : ");
    String whatever;
    Scanner scanIn = new Scanner(System.in);
    Whatever = scanIn.nextLine();
    scanIn.close();            
    System.out.println(Whatever);
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
J Einlesen von Servernachrichten von TCP-Client Netzwerkprogrammierung 17
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
T Client zu Client Kommunikation Netzwerkprogrammierung 2
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
ruutaiokwu ständig "sender address rejected: improper use of smtp" bei smtp-client Netzwerkprogrammierung 4
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
A Chatserver/-client - Code stoppt bei readUTF() Netzwerkprogrammierung 7
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
L Zugriffprobleme Client - Webservice AspenTechnology Netzwerkprogrammierung 0
A Client Client Übertragung Netzwerkprogrammierung 12
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
K Socket Netty Client wirft Fehler! Netzwerkprogrammierung 3
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
U Socket Client mit hash authentifizieren Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
J Client - Serversocket Netzwerkprogrammierung 1
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
N Fragen zu Sockets Client Netzwerkprogrammierung 3
F Extasys TCp Client extends Funktion Netzwerkprogrammierung 0
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
A Socket Wie ein einfacher Multithreads Service mit Telnet als Client mit Observable/Observer gelöst.... Netzwerkprogrammierung 0
K C# Server - Android Client Netzwerkprogrammierung 0
T Application Client NullPointerExc Netzwerkprogrammierung 7
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
N FTP FTP Client invalid IPv6 address (Apache Commons Net API) Netzwerkprogrammierung 6
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
X RMI: Woher kennt der Client das Schnittstellen-Interface? Netzwerkprogrammierung 2
E Thematik Client server Netzwerkprogrammierung 2
D UDP Client empfängt nichts Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
N Client Identifikation eines Servers Netzwerkprogrammierung 1
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
B TCP Client Android Netzwerkprogrammierung 3
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
OnDemand Ist Client noch angemeldet? Netzwerkprogrammierung 7
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
D Socket UDP Client reagiert nicht auf spontane Meldungen Netzwerkprogrammierung 5
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
J Client Server - Serialisierung Netzwerkprogrammierung 8
C Client connection per Portforwarding auf einen lokalen Serverport Netzwerkprogrammierung 3
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben