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?
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.
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.
Kannst Du mir sagen wo sich Dein .ssh Ordner für den User FHEM befindet?
Mach mal bitte ein ls -all /opt/fhem/
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
Sieht gut aus soweit. Kann jetzt nicht sagen wo das Problem liegen soll.
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?
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
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.
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...
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
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
ja. natürlich.
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...
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
...
Hast Du für den User fhem in der /etc/passwd wirklich eine shell angegeben?
da wird versucht eine passphrase zu lesen. bist du sicher das der key wirklich keine hat?
habe es mal mit neuen schlüsseln und leerer passphrase probiert und es geht. es muss also ein problem mit dem ssh-agent sein und dass die .bashrc aus dem system() von fhem nicht korrekt ausgeführt wird...