[gelöst] "qx(ssh ..." will nicht

Begonnen von CQuadrat, 28 Januar 2019, 13:49:44

Vorheriges Thema - Nächstes Thema

CQuadrat

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
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CQuadrat

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.).
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

betateilchen

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

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CQuadrat

#4
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.
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wernieman

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"

- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

CQuadrat

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
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

CQuadrat

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
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

turo

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
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

CQuadrat

#10
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



FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

Wernieman

Ubnd wie sieht nur Dein Eintrag für fhem in der passwd aus?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

CQuadrat

#12
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.
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

Wernieman

Ich würde sagen, das fhem ein Probplem mit dem @ hat .. da kommt bei mir eine Fehlermeldung. Warscheinlich müsste es gequotet werden...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

turo

Yepp - da standen wir auf dem Schlauch: qx() macht Variablenexpansion und mit "@" beginnen nun mal die Arrays.

Turo
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo