Socket Shellscript über ssh Verbindung aufrufen

Status
Nicht offen für weitere Antworten.
Hallo Zusammen,

ich möchte von meinem Lokalen Arbeitsplatzrechner (Windows) ein shell script auf einem entfernten Rechner (Linux) starten.
Ich verwende die jcraft.jsch Bibliothek, über die ich auch hier im Forum gestolpert bin.
Die Verbindung zum Host ist kein Problem und ich kann auch jeden x-Beliebigen Linuxbefehl absetzen den er mir problemlos ausführt. Nur ein skript bekomme ich nicht gestartet... Kann mir da jemand helfen?

Hier ist der Code den ich verwende:

Java:
public static void main(String[] arg){
    try{
      String user="ben";
      String host="host";
      JSch jsch=new JSch();
      Session session=jsch.getSession(user, host, 22);
      session.setPassword("pass");
      session.setConfig("StrictHostKeyChecking", "no");
      session.connect();

      String command="/bin/bash 09start";
      Channel channel=session.openChannel("exec");
      ((ChannelExec)channel).setCommand(command);

      OutputStream out=channel.getOutputStream();
      InputStream in=channel.getInputStream();

      channel.connect();

      if(checkAck(in)!=0){
	System.exit(0);
      }

      command+="\n";
      out.write(command.getBytes()); out.flush();
      if(checkAck(in)!=0){
	System.exit(0);
      }
     
      out.close();

      channel.disconnect();
      session.disconnect();

      System.exit(0);
    }
    catch(Exception e){
      System.out.println(e);
    }
  }

Wenn ich anstelle dieser Codezeile
Java:
String command="/bin/bash 09start";
irgendeinen anderen Befehl eintippe (z.B. "mkdir temp") funktioniert alles wunderbar

Was mache ich denn falsch?
 

mfernau

Bekanntes Mitglied
schwer zu sagen - ich kenne die Bibliothek nicht.
Meine Frage wäre jetzt nur: befindet sich denn "09start" auch in dem Verzeichnis in dem Du Dich befindest? Gibt's eine Fehlermeldung die Du auslesen könntest? Oder schon mal versucht ein Shellskript zu starten in dem der Interpreter in der ersten Zeile angegeben ist "#!/bin/bash" und +x hat?
 
T

tuxedo

Gast
Geb mal den kompletten Pfad zu deinem "09start" script an... Vermute er findet's nicht.

- Alex
 
ok ich hab jetzt mal den Interpreter direkt im Skript, und beim Aufruf den kompletten Pfad angegeben. Tut sich aber leider nichts. Hab die Aufrufe auch schon so geändert indem ich das Skript direkt mit "./09start", "sh 09start" oder "bash /pfad/09start" angesprochen hab. Leider Nix.
Gleiches hab ich inzwischen auch mal mit einer anderen Bibliothek probiert: Ganymed SSH-2 for Java
Funktioniert auch nicht... andere Befehle funktionieren allerdings nach wie vor.
Übrigens bevor die Frage auftaucht: Ja ich habe alle Rechte auf das Skript gesetzt (chmod 777) ;-)

Gibt's vielleicht noch ne Alternative die ich übersehe? Wenn's nicht direkt geht, geht's vielleicht indirekt :)
 

mfernau

Bekanntes Mitglied
hmm.... schnall ich nicht. Gibt es da vielleicht eine Beschränkung bei den Bash-Skripten dass diese nur in "echten" Shells laufen? Es gibt ja unterschiedliche Shell-Arten. Ich glaub man kann das als abfragen in welcher Shell man sich befindet und vielleicht gibt es da ein Sicherheitsfeature dass die Ausführung verhindert?
Kannst Du denn andere Skripte ausführen? Perl Skript z.b.?
Kannst das ja mal testen:
--- cut
#!/usr/bin/perl
system("mkdir blubb");
--- cut
das in eine Datei und 755 setzen. Ggf musst du den Pfad zum perl-Interpreter anpassen.

Was genau soll denn Dein Skript überhaupt machen? Vielleicht funktioniert es auch nur nicht, weil es selbst nicht korrekt abläuft weil durch diese Art der Ausführung diverse Umgebungsvariablen nicht gesetzt sind, die eigentlich gesetzt sein müssten damit es korrekt funktioniert? Auch hier könntest Du alternativ mal ein simples Skript testen um erstmal generell zu testen ob es funktioniert oder tatsächlich am Skript selbst liegt?

Grüße
 
Super! Danke das war's!

für den Benutzer mit dem ich mich angemeldet hab sind die Umgebungsvariablen zwar in seiner .profile gesetzt, sobald ich aber über meinen Java Code die Verbindung herstelle sind ihm diese Einstellungen egal.
Ich hab die Umgebungsvariablen jetzt einfach nochmal direkt im Skript mit aufgenommen dann hat das funktioniert!

Merci! :)
 

ToM912

Mitglied
Halloa :) Ich dachte, ich wende mich gleich mal an euch, bin denn Neueinsteiger...
Ich will eine SSH Verbindung mit einem private Key aufbauen... Ich würde es begrüßen, wenn ihr mir so leicht wie möglich helfen könntet... also nur notwendigen Code etc. sonst verstehe ich leider nur Bahnhof...

Also, so sieht mein Code aus... bei session.connect(); schmierrts immer ab..
Java:
import org.junit.Test;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;


public class sshtesting {

	@Test
	public void main() {
		
		
		try{
		      String user="localhost";
		      String host="localhost";
		      JSch jsch=new JSch();
		      Session session=jsch.getSession(user, host, 22);
		      session.setPassword("test");
		      session.setConfig("StrictHostKeyChecking", "yes");
		      session.connect();
		      System.out.println("Connected");
     
		} catch (Exception e) {
			System.out.println("Failed");
		}

		
	}

}
 

Gossi

Bekanntes Mitglied
Sicher, dass er beim .connect() abschmiert?
Kann er überhaupt ne Verbindung zu dem PC aufbauen?
Haste schonmal versucht den PC normal anzupingen?
Haste evtl. ne Fehlermeldung parat?

Muss ja nicht umbedingt am Quellcode liegen....
 

ToM912

Mitglied
Danke erst einmal für deine Antwort...
Loocalhost also 127.0.0.1 kann ich anpingen (keine Losts)

Ein Fehlermeldung habe ich leider nicht parat... der läuft halt durch und sagt mir wie ich es in der Exeption definiert habe "Failed"...

Habe .connect() auch schon auskommentiert... dann läufts aber hab dann halt keine verbindung... =/
 

Gossi

Bekanntes Mitglied
Danke erst einmal für deine Antwort...
Loocalhost also 127.0.0.1 kann ich anpingen (keine Losts)

Ein Fehlermeldung habe ich leider nicht parat... der läuft halt durch und sagt mir wie ich es in der Exeption definiert habe "Failed"...

Habe .connect() auch schon auskommentiert... dann läufts aber hab dann halt keine verbindung... =/

versuch mal anstelle von:

Java:
System.out.println("Failed");

das hier:

Java:
e.printStackTrace();
 

ToM912

Mitglied
Ist die Fehlermeldung in der Console...
Eine Idee? Kann damit leider nix anfangen =/

com.jcraft.jsch.JSchException: reject HostKey: localhost
at com.jcraft.jsch.Session.checkHost(Session.java:690)
at com.jcraft.jsch.Session.connect(Session.java:307)
at com.jcraft.jsch.Session.connect(Session.java:150)
at sshtesting.main(sshtesting.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
 

ToM912

Mitglied
ja, das hab ich mir auch gedacht :D aber gute Frage wieso... JSch kann ich auch nicht =/ gibts denn andere möglichkeiten die SSH-Verbindung herzustellen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Tabelle im Web über Listener aufrufen Netzwerkprogrammierung 1
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
B Zip Dateien über FTP laden Netzwerkprogrammierung 2
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
L Webbasierte Anwendung - Authentifizierung über LDAP/ActiveDirectory Netzwerkprogrammierung 5
J Probleme mit Multicast über IPv6, DatagramChannel Netzwerkprogrammierung 1
S Daten über TCP/IP senden Netzwerkprogrammierung 3
T Broadcast-message über spez. Netzwerk-Schnittstelle Netzwerkprogrammierung 1
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
T VPN-Verbindung über Java Netzwerkprogrammierung 4
V Einfachen Javaserver über das Internet erreichbar machen Netzwerkprogrammierung 2
J FTP Upload über Proxy funktioniert nicht Netzwerkprogrammierung 1
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
antonbracke Multiuser Software über XMPP Server Netzwerkprogrammierung 1
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
cezary Socket ServerSocket starten über GUIIm unterstehenden Code versuche Netzwerkprogrammierung 6
I ASCII über serielle Schnittstelle Netzwerkprogrammierung 1
N RMI "RMI über Lan funktioniert nicht" & "RMI-Server im Lan scannen" Netzwerkprogrammierung 13
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
T Socket Methoden über Internet aufrufen Netzwerkprogrammierung 1
S Socket Kommunikation über Internet Netzwerkprogrammierung 1
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
P RMI Threads die über RMI auf Datenbank zugreifen Netzwerkprogrammierung 2
S Datei schreiben über Applet Netzwerkprogrammierung 8
G Klassen über Netzwerk kommunizieren lassen Netzwerkprogrammierung 6
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Class über Netzwerk verschicken Netzwerkprogrammierung 2
D JNLP über Webstart funktioniert nicht... Netzwerkprogrammierung 2
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
A Computer über Internet verbinden Netzwerkprogrammierung 12
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
c_sidi90 ideale Lösung, Screen Capture über Netzwerk Netzwerkprogrammierung 3
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T ArrayList über Netzwerk senden! Netzwerkprogrammierung 5
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
T Verbindungsversuche über TCP Sockets von mehreren Threads führt zu Serverabsturz Netzwerkprogrammierung 2
V Authentifikation über mehrere Server? Netzwerkprogrammierung 3
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
M Map über Webservice übertragen Netzwerkprogrammierung 3
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
G Klassen über JMX per URLClassloader laden? Netzwerkprogrammierung 2
E Zwei PCs über das Internet miteinander verbinden? Netzwerkprogrammierung 3
E Socketverbindung über das Internet - Timeout? Netzwerkprogrammierung 28
M Socket Bilder über das Netzwerk übertragen Netzwerkprogrammierung 4
E Java über Socket ins Internet? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
M Socket JavaProg über einen Clienten steuern Netzwerkprogrammierung 5
M Mail über Exchange versenden Netzwerkprogrammierung 13
F C/S über HTTPS Netzwerkprogrammierung 2
D ...class.getResourceAsStream("/meine.properties") funktioniert nicht über RMI? Netzwerkprogrammierung 3
M ganymed-ssh2.har: ftp-Verbindung über ftp-Proxy Netzwerkprogrammierung 2
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2
Z File über Socket lesen Netzwerkprogrammierung 3
A HTTP Binärdaten über PHP-Skript in Datenbank schreiben bzw auslesen Netzwerkprogrammierung 2
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
P FTP isFile() über FTP Netzwerkprogrammierung 3
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
M Objekt über socket senden/empfangen Netzwerkprogrammierung 3
N Socket File über Socket vom Server an Client versenden Netzwerkprogrammierung 15
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
A UCP Connection über Proxy möglich? Netzwerkprogrammierung 7
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8
F Char über Netzwerk senden Netzwerkprogrammierung 6
S HTTP Login mit CAS Authentisierung über SSL Netzwerkprogrammierung 2
C Befehle über ein GUI an Server senden Netzwerkprogrammierung 15
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
I Objekte über das Netzwerk Netzwerkprogrammierung 5
M Google Translate über Java ansprechen? Netzwerkprogrammierung 13
F Socket ImageIcon über Socket --> Fehler Netzwerkprogrammierung 14
N Datenaustausch zwischen Java-GUI und PHP-Programm über SOAP Netzwerkprogrammierung 19
L RMI Informationen über die Clients herausfinden Netzwerkprogrammierung 5
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
1 Kommunikation mit externem Programm über TCP Netzwerkprogrammierung 2
U Informationen über Netzwerkclients herausfinden Netzwerkprogrammierung 2
J Socket Erreichbarkeit eines Java Servers (Socket-Lösung) über das Internet Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben