SSH-Connection - Auto-Vervollständigung mittels TAB

sorny

Mitglied
Aloha :)

Ich schreibe atm gerade an einem Online-SSH Client mit JSP.
Meine Probleme liegen nicht an JSP, Servlets usw, sondern an der dahinterliegenden Connection.

Ich verwende die Library "Ganymed 2 SSH2" Ganymed SSH-2 for Java

Soweit sogut, Verbindung aufbauen, Welcome-Message auslesen, Kommandos absetzen, Verbindung beenden usw funktionieren super.
Das Problem liegt zur Zeit eher an einer "Komfort-Funktion". Mein Ziel ist es, TAB verwenden zu können, um die Auto-Vervollständigung eines Terminals zu simulieren.

Hier mal mein Code:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;

/*
 * @author: Gerald Reisinger
 * @description: Basic SSH-connection functions like connect, exec & disconnect
 * @date: 18.05.2010 14:32
 */

public class SSH_connection {
	
	
	//Construktor
	public SSH_connection(String host, String username, String password) {
		this.setHostname(host);
		this.setUsername(username);
		this.setPassword(password);
		
		this.initConnection();
	}
	
	
	//Variables
	private String hostname;
	private String username;
	private String password;
	private String welcome_message ="";
	private Connection conn = null;
	
	int y= 0;
	int x =0;
	char[][] lines = new char[y][];
	int posy = 0;
	int posx = 0;

	
	private void initConnection() {
		try {
			// Create a connection instance
			this.conn = new Connection(hostname);
			conn.connect();
			
			// Authenticate
			boolean isAuthenticated = conn.authenticateWithPassword(username, password);
			if (isAuthenticated == false)
				throw new IOException("Authentication failed.");
			
			Session sess = conn.openSession();

			//Catch Welcome Message
			
			sess.requestPTY("bla");
			sess.startShell();

			//Testing
			//Sending "cd /e" to the pseudo-Terminal and the tab-keycode(=9) 
			//seems not to work since it goes into nowhere/is not read by the input-reader
			OutputStream out = sess.getStdin();
			out.write(99);
			out.write(101);
			out.write(32);
			out.write(47);
			out.write(101);
			out.write(9);
			//enter-key
 			//out.write(10); 
			
			StreamGobbler stdout = new StreamGobbler(sess.getStdout());
			//InputStream stdout = new StreamGobbler(sess.getStdout());
			BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

			int c = sess.getStdout().available();
			
			System.out.println(c);
			
			for (int i = 1; i <= c; i++) {
				int bla = br.read();
				this.welcome_message += String.valueOf((char)bla);
			}
	
			System.out.println(this.welcome_message);
			//System.out.println(this.username+this.hostname+":~$ ");
			
			sess.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public String exec(String command) {

		
		//Only one command executions per session possible. 
		//This is not a restriction of the library, but rather an enforcement by the underlying SSH-2 protocol
		
		String answer ="";
		Session sess = null;
		
		try {
			sess = conn.openSession();
			sess.execCommand(command);

			InputStream stdout = new StreamGobbler(sess.getStdout());
			BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

			while (true)
			{
				String line = br.readLine();
				if (line == null)
					break;
				//System.out.println(line);
				answer += line;
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}

		
		sess.close();
		
		return answer;
	    
	}
	
	//atm not working, quite difficult to handle the pseudo-terminal in the background
	public void tabbed() {
		
		try {
			Session sess = conn.openSession();
			//String answer ="";
			
			//Testing
			
			OutputStream out;
			out = sess.getStdin();
			out.write(99);
			out.write(101);
			out.write(32);
			out.write(47);
			out.write(101);
			out.write(9);

			InputStream stdout = new StreamGobbler(sess.getStdout());
			BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

			while (true)
			{
				String line = br.readLine();
				if (line == null)
					break;
				//System.out.println(line);
				//answer += line;
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	//Close the connection
	public boolean disconnect() {
		this.conn.close();
		return true;
	}
	
	//Getter & Setter
	public String getHostname() {
		return hostname;
	}
	public void setHostname(String hostname) {
		this.hostname = hostname;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

	public String getWelcome_message() {
		return welcome_message;
	}

	public void setWelcome_message(String welcomeMessage) {
		welcome_message = welcomeMessage;
	}
	public String getUserHost() {
		String msg = this.username+this.hostname+":~$ ";
		return msg;
	}
	
}


Vllt habt ihr ja Erfahrung mit dieser Lib, einer anderen Lib für SSH-Connections oder vllt ne andere Idee, die Auto-Vervollständigung zu realisieren.
LG Gerald
 

musiKk

Top Contributor
Die Auto-Vervollständigung ist ja Bestandteil der Shell und nicht der SSH-Verbindung. Insofern sollte es doch reichen, wenn Du einen Tab (oder je nach Shell auch zwei) hinschickst und die Ausgabe liest.
 

sorny

Mitglied
Hab ich scho versucht, funktioniert leider nicht. Wobei ich zur Zeit nur mehr ein kleines Problem hab.

Keine Ahnung welchen KeyChar die Shell als Tab erwartet!?
 

musiKk

Top Contributor
Ich hab mal etwas gegoogelt und bin auf einen Commit gestoßen, der die Folge "tab key" enthält. Such mal danach. Dort wird als Demo offensichtlich ein Swing-Client vorgestellt. Dabei wird einfach nur der KeyChar aus dem [c]KeyEvent[/c] geholt und so wie er ist abgeschickt. Demnach ist das wohl einfach nur der Code 9; wie in der ASCII-Tabelle.
 

sorny

Mitglied
Jup, hab ich schon getestet, funktioniert leider nicht. Muss wohl irgendwo in meinem Code liegen. Aus dem Swing-Beispiel hab ich scho einiges an Information rausgezogen. Mal nochmal alles überdenken.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
x46 Connection reset by peer: socket write error Netzwerkprogrammierung 6
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
Thalion TCP Connection zu langsam Netzwerkprogrammierung 2
S Client Server Connection Netzwerkprogrammierung 4
C Handle Connection Problem Netzwerkprogrammierung 3
R Socket InputStream readObject > Connection Reset Netzwerkprogrammierung 3
L ssh connection; Zugriff auf 'screen' Prozess Netzwerkprogrammierung 5
C Client connection per Portforwarding auf einen lokalen Serverport Netzwerkprogrammierung 3
M Connection refused? Netzwerkprogrammierung 2
D Connection refused Netzwerkprogrammierung 3
B Client/Server Connection Problem Netzwerkprogrammierung 2
D Socket Socket absichtlich so schließen, dass Gegenseite java.net.SocketException: Connection reset wirft Netzwerkprogrammierung 4
C Socket Connection refused bei Internetverbindung - Welcher Port? Netzwerkprogrammierung 5
K Socket Exception Connection reset Netzwerkprogrammierung 9
VfL_Freak Socket SocketException: Connection reset Netzwerkprogrammierung 11
C Socket Socket: Connection timed out Netzwerkprogrammierung 3
T Empfangen klappt Senden nicht - Connection timed out Netzwerkprogrammierung 12
H java.net.ConnectException: Connection refused Netzwerkprogrammierung 3
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
RELAXccc HTTP Connection timed out: connect ?an was kann es liegen? Netzwerkprogrammierung 4
G Exception: Connection reset by peer: socket write error Netzwerkprogrammierung 2
N Socket verliert die Connection. Netzwerkprogrammierung 4
A UCP Connection über Proxy möglich? Netzwerkprogrammierung 7
M RMI - Connection Problem Netzwerkprogrammierung 7
trash HTTP Internet Connection bei Proxy ?! Netzwerkprogrammierung 3
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
H RMI Connection refused bei RMI-Registry Netzwerkprogrammierung 10
A Chatprogramm: Connection refused Netzwerkprogrammierung 4
T RMI RMI und VPN - callbackObject Connection refused Netzwerkprogrammierung 13
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
J Connection Speed Test ohne Applet Netzwerkprogrammierung 5
0din Connection refused bei localhost?! Netzwerkprogrammierung 7
M FTP-Connection über FTP-Proxy Netzwerkprogrammierung 20
T Wie connection Reset abfragen/abfangen? Netzwerkprogrammierung 10
A RMI java.rmi.ConnectException: Connection refused to host: 1 Netzwerkprogrammierung 4
M chat funktioniert nicht (Connection refused: connect) Netzwerkprogrammierung 3
G InputStreamReader lässt TCP-Connection offen Netzwerkprogrammierung 9
X URL connection Problem Netzwerkprogrammierung 3
R ConnectException: Connection refused to host: 192.168.1.4 ? Netzwerkprogrammierung 8
sparrow Connection Reset bei Webserver, Java WebStart als Client Netzwerkprogrammierung 9
tfa RMI-Problem: Connection refused to host: 127.0.0.2 Netzwerkprogrammierung 4
G Connection zu MySQL ohne ODBC Netzwerkprogrammierung 8
IT-MaD Connection reset by peer: socket write error Netzwerkprogrammierung 2
B RMI & Connection refused to host Netzwerkprogrammierung 12
G httpUnit: Connection timed out Netzwerkprogrammierung 3
lhein java.io.IOException: Unable to establish loopback connection Netzwerkprogrammierung 4
Paule Connection Applet Servlet ohne Socket bzw RMI Netzwerkprogrammierung 2
B Multithreaded Server: Connection reset Netzwerkprogrammierung 4
T JDBC Verbindungsabbruch (Connection reset) Netzwerkprogrammierung 2
M SocketException: Connection reset Netzwerkprogrammierung 10
G MAC / IP Connection Netzwerkprogrammierung 10
M Problem: connection abbrechen und login erkennen Netzwerkprogrammierung 2
M Umlaute gehen bei URL Connection verloren Netzwerkprogrammierung 6
M seltsam: java.net.SocketException: Connection reset Netzwerkprogrammierung 1
B RMI Connection Problem Netzwerkprogrammierung 13
T Dateien wia P2P Connection versenden Netzwerkprogrammierung 2
D Socketverbindung schlägt fehl - Connection refused: connect Netzwerkprogrammierung 4
H java.net.SocketException: Software caused connection abort Netzwerkprogrammierung 4
R FTP Connection zu Server Netzwerkprogrammierung 4
M Ausgangsport für FTp-Connection festlegen??? Netzwerkprogrammierung 3
E Auto-Update programmieren! Netzwerkprogrammierung 24

Ähnliche Java Themen

Neue Themen


Oben