ssh-befehl in system() gibt fehler, geht aber in console

Begonnen von FhemPiUser, 08 Oktober 2016, 09:16:05

Vorheriges Thema - Nächstes Thema

FhemPiUser

ich möchte eine raspberry remote von fhem runterfahren lassen. dazu habe ich ssh so eingerichtet, dass man sich remote ohne passwort einloggen kann (mit ssh-agent). von der console (bash) klappt das:

ssh poweroff\@192.168.1.xxx 'sudo /sbin/shutdown -h now'

funktioniert.

aus fhem bekomme ich aber immer eine fehler, wenn ich den gleichen befehl in fhem mit system eingebe:

{system("ssh -p 1111 poweroff\@192.168.1.183 'sudo /sbin/shutdown -h now'")}

fehler im fhem log:

permission denied (publicke,password)

jemand eine idee, woran das liegen kann?

CoolTux

Dein Test machst Du als normalen User. pi oder so.
Unter fhem wird der Befehl als FHEM User fhem ausgeführt.
Die selben Vorbereitungen die die vor deinen Test als pi gemacht hast musst jetzt noch mal als User fhem machen. Oder einfach den .ssh Ordner unter /home/User/ nach /opt/fhem Kopieren und Rechte an passen.
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

FhemPiUser

danke für den hinweis, aber das kann es eigentlich nicht sein, es sei denn das der system befehl in fhem wird nicht als fhem user ausgeführt.

ich habe jedenfalls ssh für den fhem user eingerichtet und mich zum testen auch in der console als fhem user angemeldet. sorry, hatte ich vergessen zu schreiben.

CoolTux

Kannst Du mir sagen wo sich Dein .ssh Ordner für den User FHEM befindet?

Mach mal bitte ein ls -all /opt/fhem/
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

FhemPiUser

#4
hab eigenltich alles im /opt/fhem ordner angelegt. von der console aus geht ja auch alles, nur nicht aus fhem mit dem system befehl...


ls -all /opt/fhem
...
drwx------  2 fhem dialout   4096 Okt  2 19:52 .ssh
-rw-------  1 fhem dialout    136 Okt  5 21:22 .ssh-agent
...


und im .ssh ordner:


ls -all

drwx------  2 fhem dialout 4096 Okt  2 19:52 .
drwxr-xr-x 20 fhem dialout 4096 Okt  5 21:22 ..
-rw-------  1 fhem dialout  420 Jan 30  2016 authorized_keys
-rw-------  1 fhem dialout  483 Jan 30  2016 authorized_keys.bak
-rw-------  1 fhem dialout  536 Okt 30  2015 authorized_keys.save
-rw-------  1 fhem dialout 3326 Okt  2 19:51 id_rsa
-rw-r--r--  1 fhem dialout  740 Okt  2 19:51 id_rsa.pub
-rw-r--r--  1 fhem dialout  444 Okt  2 19:52 known_hosts


und ich habe nich eine .bashrc für ssh-add und den ssh-agent:


rasp2fhem:~$ cat .bashrc
ssh-add -l &>/dev/null
if [ "$?" == 2 ]; then
  test -r ~/.ssh-agent && \
    eval "$(<~/.ssh-agent)" >/dev/null

  ssh-add -l &>/dev/null
  if [ "$?" == 2 ]; then
    (umask 066; ssh-agent > ~/.ssh-agent)
    eval "$(<~/.ssh-agent)" >/dev/null
    ssh-add
  fi
fi

CoolTux

Sieht gut aus soweit. Kann jetzt nicht sagen wo das Problem liegen soll.
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

FhemPiUser

#6
es muss an irgendetwas liegen, was von der console anders ist als beim system befehl, da es von der console aus ja geht...

wird die bashrc eigentlich ausgeführt mit dem system() befehl?

justme1968

wozu eigentlich der ganze ssh-agent umstand?

ein ssh key ohne password ist für so etwas sehr viel einfacher zu handhaben und nicht weniger sicher.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

CoolTux

Zitat von: FhemPiUser am 08 Oktober 2016, 11:09:35
es muss an irgendetwas liegen, was von der console anders ist als beim system befehl, da es von der console aus ja geht...

wird die bashrc eigentlich ausgeführt mit dem system() befehl?

Wenn der User fhem die Bash als Shell zugewiesen bekommen hat dann ja.
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

FhemPiUser

#9
Zitat von: justme1968 am 08 Oktober 2016, 11:27:05
wozu eigentlich der ganze ssh-agent umstand?

ein ssh key ohne password ist für so etwas sehr viel einfacher zu handhaben und nicht weniger sicher.

gruss
  andre

habe doch ein ssh key ohne passwort eingerichtet, aber die passphrase muss einmalig eingegeben werden, daher der ssh-agent und das ssh-add, um das zu verhindern. so zumimdest mein verständnis und auch das ergebnis meiner tests...

justme1968

#10
ich meine einen key ohne passphrase. da muss nichts einmalig eingegeben werden und ssh-agent ist nicht nötig.

der key muss im known host authorized_keys file auftauchen. entweder rein kopieren, von hand ein mal ssh-add verwenden der ein mal die verbindung von hand aufbauen und die frage mit y beantworten.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Benni

Zitat von: justme1968 am 08 Oktober 2016, 11:47:26
der key muss im known host file auftauchen

Der Key für den anmeldeberechtigten User muss aber in authorized_keys

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

FhemPiUser

#13
Zitat von: justme1968 am 08 Oktober 2016, 11:47:26
der key muss im known host authorized_keys file auftauchen. entweder rein kopieren, von hand ein mal ssh-add verwenden der ein mal die verbindung von hand aufbauen und die frage mit y beantworten.

ja, habe ich: der public key vom lokalen pc ist in der authorized_keys datei des remote pc.

vermutlich ginge es auch ohne passwortschutz der keys...

FhemPiUser

#14
hab mal ssh mit -vv getestet und den debug output von console mit dem von system aus fhem verglichen. an der markierten stelle kommt auf der console "authentication successfull" und bei aufruf aus system aus fhem ein fehler. es muss also irgendwie am ssh-agent hängen, evtl wird die bashrc über system() aus fhem nicht oder nicht so wie von der console ausgeführt...


...
Server host key: ECDSA xxx
debug1: Host '[192.168.1.xxx]:xxx' is known and matches the ECDSA host key.
debug1: Found key in /opt/fhem/.ssh/known_hosts:2
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /opt/fhem/.ssh/id_rsa (xxx),
debug2: key: /opt/fhem/.ssh/id_dsa ((nil)),
debug2: key: /opt/fhem/.ssh/id_ecdsa ((nil)),
debug2: key: /opt/fhem/.ssh/id_ed25519 ((nil)),
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /opt/fhem/.ssh/id_rsa
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug2: input_userauth_pk_ok: xxx
<-ab hier Unterschied!!!->
debug1: key_load_private_type: incorrect passphrase supplied to decrypt private key
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug2: no passphrase given, try next key
...