Hallo allerseits,
ich stehe gerade irgendwie auf dem Schlauch: Für meine Anwesenheitserkennung frage ich regelmäßig die ARP-Tabelle in meinem Netzwerkrouter ab. Wenn dort bestimmte Geräte eingeloggt sind, dann wird dies als Anwesenheit interpretiert. Die Abfrage erfolgt per SSH mittels des folgenden Scripts:
use Net::SSH2;
...
sub SSH_Einlesen() {
my $buf;
my $tim=time();
my $ssh2 = Net::SSH2->new(trace => -1 );
$ssh2->connect('10.20.1.5') or die "Unable to connect Host $@ \n";
$ssh2->auth_password('admin','<Passwort>') or die "Unable to login $@ \n";
my $chan = $ssh2->channel();
$chan->blocking(0);
$chan->shell();
$buf=$buf.$_ while <$chan>;
$chan->write("ip arp status\n");
$buf=$buf.$_ while <$chan>;
if ($buf) {
$buf =~ s/\r/ /;
$buf =~ s/\n/ /;
fhem("setreading dm.ssh_read arp ".$buf);
fhem("setreading dm.ssh_read Status Ok");
}
...
Das funktionierte bisher auch sehr gut. Ich habe nun meine FHEM-Installation auf einen neuen RaspberryPi4 migriert und jetzt funktioniert das Script nicht mehr. Das für Net::SSH2 erforderliche Paket libnet-ssh2-perl habe ich installiert, aber trotzdem passiert nichts (keine Fehlermeldung im Log, nichts... :-[). Hat jemand einen Tipp?
Schon mal vielen Dank und viele Grüße!
Michael
Moin Michael,
ich weiß nicht wie das mit der Perl Lib genau funktioniert. Aber normal gibt es bei ssh zwei "Eckpunkte":
known_hosts
authorized_keys
Hast Du Dich darum bei der Migration gekümmert?
Gruß Otto
Moin Otto,
Zitat
ich weiß nicht wie das mit der Perl Lib genau funktioniert. Aber normal gibt es bei ssh zwei "Eckpunkte":
known_hosts
authorized_keys
Hast Du Dich darum bei der Migration gekümmert?
Nein, denn nach meiner Erinnerung fragt das Perl-Modul diese Dinge nicht ab. Hier läuft die Authorisierung klassisch per Nutzername/Passwort ab, ohne dass m. E. die Keys der Gegenseite überprüft werden (so zumindest meine Erinnerung, als ich das vor Jahren übernommen habe). Was mich halt stutzig macht ist, dass keinerlei Fehlermeldung geschmissen wird (z. B. gleich beim Verbindungsaufbau).
Viele Grüße
Michael
Das stimmt nicht ganz denke ich. Zu mindest eine einmalige Bestättigung des Maschinenkeys wird bestimmt erfolgen.
known_hosts
Mach diese Anmeldung als User fhem mal bitte einmalig auf der Konsole und bestättige des Hostkey.
Hallo,
Zitat
Das stimmt nicht ganz denke ich. Zu mindest eine einmalige Bestättigung des Maschinenkeys wird bestimmt erfolgen.
known_hosts
Mach diese Anmeldung als User fhem mal bitte einmalig auf der Konsole und bestättige des Hostkey.
Das habe ich schon gemacht. Über die Konsole kann ich mit dem Nutzer fhem und per ssh auf den Router zugreifen. Ich habe mittlerweile das Gefühl, dass irgendwie das Modul Net::SSH2 nicht sauber installiert ist. So konnte fhem offenbar zumindest eben einmalig die Verbindung bis zur Konsole aufbauen. Der nachfolgende Befehl wurde jedoch nicht abgesetzt. Auch konnte ein erneuter Aufbau der Verbindung nicht erreicht werden. Ohne Fehler oder eine sonstige Meldung... >:(
Gruß
Michael
Da hilft dann wohl nur mehr Debugausgaben ein zu bauen in Deinen Code würde ich sagen.
Zitat von: m8ichael am 03 November 2019, 10:47:52
So konnte fhem offenbar zumindest eben einmalig die Verbindung bis zur Konsole aufbauen. Der nachfolgende Befehl wurde jedoch nicht abgesetzt. Auch konnte ein erneuter Aufbau der Verbindung nicht erreicht werden. Ohne Fehler oder eine sonstige Meldung... >:(
Aus meiner Sicht hat das Perl Modul und ssh auf Kommandozeile (das meinst Du mit Console?) gar nicht viel zu tun (außer sicher die keys in .ssh)
Du meinst jetzt: Du konntest nur einmal eine Verbindung machen? Dann liegt das Problem doch aber woanders?