automatisieren Ich muss einen Weg finden, SSH-Befehle zu meinem Router zu automatisieren. Mein Ziel ist es, den Router neu zu starten, wenn ich das Skript von meinem Java-Programm aus starte. Ich habe jedoch einige Probleme.Müssen SSH-Befehle an Router
Zunächst einmal ist dies die Folge des Ausgangs ich von meinem Router ssh erhalten: Zuerst habe ich zu tun:
ssh [email protected]
, die zurückgibt:
[email protected]'s password:
ich das Passwort eingeben, „admin ". Es geht dann auf diese Aufforderung:
Welcome Visiting Huawei Home Gateway
Copyright by Huawei Technologies Co., Ltd.
Password is default value, please modify it!
WAP>
Nun, ich Eingang „Reset“ und startet den Router.
Ich habe versucht Tcl mit Expect und während ich es unter Windows arbeiten kann, funktioniert es nicht auf Linux. Hier ist mein Code für den Tcl-Skript:
#!/bin/sh
# \ exec tclsh "$0" ${1+"[email protected]"}
package require Expect
spawn ssh [email protected]
send "admin\r"
send "reset\r"
after 3000
exit
Jedes Mal, wenn ich versuche, es auszuführen, Tcl8.6 läuft hindurch und endet, ohne tatsächlich etwas zu tun. Allerdings, wenn ich manuell alle diese Befehle während der Ausführung von Tcl8.6 eingeben, funktioniert es gut
Ich habe auch versucht, die JSch Java-Bibliothek. Damit kann ich das Java-Programm dazu bringen, eine Verbindung herzustellen und die Shell des Routers auszugeben, aber jeder Befehl, den ich versuche zu senden, tut nichts. Hier ist der Code aus, dass:
...
JSch jsch = new JSch();
Session session = jsch.getSession("root", "192.168.100.1", 22);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
// Skip prompting for the password info and go direct...
session.setPassword("admin");
session.connect();
String command = "reset\r";
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
System.out.println("Connect to session...");
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) {
break;
}
System.out.print(new String(tmp, 0, i));
}
if (channel.isClosed()) {
System.out.println("exit-status: " + channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
}
}
channel.disconnect();
session.disconnect();
System.out.println("disconnected");
Dies ist die Ausgabe, die ich bekomme:
Connect to session...
Welcome Visiting Huawei Home Gateway
Copyright by Huawei Technologies Co., Ltd.
Password is default value, please modify it!
WAP>
Es bleibt nur hier, bis ich verlassen. Der Router wird nicht neu gestartet. Ich habe auch versucht:
String command = "reset";
aber es tut die gleiche Sache. Kennt jemand andere Möglichkeiten, wie ich das machen könnte?
Ich habe gerade bemerkt, dass Ihr Befehl mit '\ r' endet. Probieren Sie stattdessen '\ n' aus und sehen Sie, ob es für Sie funktioniert. – vempo