Hallo Zusammen,
da muss ich doch mal unter Anfängerfragen etwas posten. 8)
Ich versuche auf Perl-Ebene per ssh remote einen Befehl abzusetzen:
{qx(ssh -F /opt/fhem/ssh/config -i /opt/fhem/ssh/id_rsa pi@192.168.2.20 uptime)}
Dabei passiert nichts; nichtmal eine Fehlermeldung kommt.
Keys und known_host habe ich erzeugt und sind unter /opt/fhem/ssh abgespeichert. (Mein User fhem hat kein home-Verzeichnis.)
Auf der Linux-Konsole als User fhem (unter root) funktionert es:
sudo -u fhem ssh -F /opt/fhem/ssh/config -i /opt/fhem/ssh/id_rsa pi@192.168.2.20 uptime
In diverse FHEM-Modulen wird es doch auch so gemacht. Bin ratlos. Weiß hier jemand weiter?
Zumindest
{qx(/usr/bin/ssh --help)}
müsste doch eine Ausgabe bringen; tut es aber nicht. :-\
Der Aufruf von
{qx(which ssh)}
ergibt übrigens: /usr/bin/ssh
Danke und Gruß
Christoph
Was genau soll denn passieren. Es wird nur einBefehl ausgeführt. Mehr nicht.
Wenn Du eine Antwort erwartest dann solltest Du diese Antwort schon noch in eine Variable einlesen lassen.
Das habe ich natürlich auch ausprobiert.
So liefert:
sub TestSub()
{
my $ret = qx(uptime);
return $ret;
}
14:22:10 up 23:05, 2 users, load average: 0.36, 0.52, 0.53
Aber:
sub TestSub()
{
my $ret = qx(ssh -F /opt/fhem/ssh/config -i /opt/fhem/ssh/id_rsa pi@192.168.2.20 uptime);
return $ret;
}
liefert nix obwohl der Befehl grundsätzlich funktioniert (s.o.).
welche uptime willst Du denn eigentlich rausfinden?
Du versuchst, Dich als User pi auf einem Rechner anzumelden? Das macht man normalerweise mit ssh -l <user> <host> und nicht mit user@host
In dem Beispiel mit ssh natürlich ;) die uptime vom 192.168.2.20.
Mit geht es hier nur drum, dass ssh im qx() bei mir grundsätzlich nicht geht.
Denkt euch als Befehl auch whoami, sudo reboot, ps ax oder was auch immer.
PS:
von Konsole
sudo -u fhem ssh -F /opt/fhem/ssh/config -i /opt/fhem/ssh/id_rsa pi@192.168.2.20 uptime
14:50:28 up 2:06, 1 user, load average: 0,12, 0,27, 0,26
In FHEM mit qx:
{qx(ssh -F /opt/fhem/ssh/config -i /opt/fhem/ssh/id_rsa pi@192.168.2.20 uptime)}
keine Ausgabe.
PPS:
FHEM läuft unter User fhem.
Zitat von: CQuadrat am 28 Januar 2019, 14:45:04
Mit geht es hier nur drum, dass ssh im qx() bei mir grundsätzlich nicht geht.
Ich würde ja eher tippen es hat nix mit qx sondern mit ssh als User fhem zu tun. Es läuft wahrscheinlich als User pi (oder welcher auch immer das eingerichtet hat) aber eben nicht als jeder andere User.
Gruß Otto
ZitatDu versuchst, Dich als User pi auf einem Rechner anzumelden? Das macht man normalerweise mit ssh -l <user> <host> und nicht mit user@host
Auszug aus "man ssh"
SYNOPSIS
ssh ...... [user@]hostname [command]
Also durchaus als user@hostname. Allerding ... könnte es sein, das es so FHEM nicht mag?
Die config/id_rsa gehören dem User FHEM? Und sind nicht les/schreibbar für "alle"
User Pi gibt es auf dem FHEM-Server bei mir nicht.
FHEM läuft unter User fhem
fhem 3562 34.0 3.5 494460 272072 ? S Jan27 483:09 perl fhem.pl fhem.cfg
Zitat von: Wernieman am 28 Januar 2019, 14:56:10
Die config/id_rsa gehören dem User FHEM? Und sind nicht les/schreibbar für "alle"
drwxrwxr-x 2 fhem fhem 4096 Jan 28 12:20 ./
drwxrwxr-x 23 fhem fhem 4096 Jan 28 11:53 ../
-rw-r--r-- 1 fhem fhem 45 Jan 28 12:12 config
-rw------- 1 fhem fhem 1679 Jan 28 12:20 id_rsa
-rw-r--r-- 1 fhem fhem 392 Jan 28 12:20 id_rsa.pub
-rw-r--r-- 1 fhem fhem 174 Jan 28 12:13 known_hosts
Mich wundert das "Mein User fhem hat kein home-Verzeichnis." Wie sieht denn der /etc/passwd Eintrag für fhem aus.
Meine Hypothese wäre nämlich, dass das ssh durchaus merkt, ob es vom Prompt oder per qx() aufgerufen wurde. (Etwa daran, dass stdout kein tty ist.) Da kann es dann schon sein, dass es im nicht interaktiven Fall einfach die Arbeit verweigert, wenn es etwa kein Homedir sieht.
Turo
Zitat von: turo am 28 Januar 2019, 15:01:12
Mich wundert das "Mein User fhem hat kein home-Verzeichnis." Wie sieht denn der /etc/passwd Eintrag für fhem aus.
Es ist nicht unüblich, dass User kein Home-Verzeichnis haben; z.B. die ganzen System-User.
Ich habe den fhem-User damals bewusst so angelegt (adduser --no-create-home).
Der Aufruf von
{qx(whoami)}
ergibt übrigens
fhem
Ubnd wie sieht nur Dein Eintrag für fhem in der passwd aus?
Okay, ich hab's. Der Hinweis von Wernieman war es:
So muss es sein:
{qx(ssh -F /opt/fhem/ssh/config -i /opt/fhem/ssh/id_rsa -l pi 192.168.2.20 uptime)}
Das funktioniert nicht:
{qx(ssh -F /opt/fhem/ssh/config -i /opt/fhem/ssh/id_rsa pi@192.168.2.20 uptime)}
Obwohl die Schreibweise mit pi@... in der Linux Konsole funktioniert.
Ich würde sagen, das fhem ein Probplem mit dem @ hat .. da kommt bei mir eine Fehlermeldung. Warscheinlich müsste es gequotet werden...
Yepp - da standen wir auf dem Schlauch: qx() macht Variablenexpansion und mit "@" beginnen nun mal die Arrays.
Turo
O.K. .. Korrektur: perl (qx) hat ein Problem *griiins*