SSH ohne Passwort und Aufruf aus C-Programm

  • Hallo zusammen,

    habe mehrere Raspis mit Raspian im Heimnetz im Einsatz.

    Auf den Raspis laufen mehrere Programme, die ich in C programmiert habe.

    Nun kann ich bereits vom Raspi A aus ein Programm auf dem Raspi B starten über

    SSH user@IP-Addr. <Programmaufruf>

    Da ich SSH über Schlüssel aufgesetzt habe, geht das von der Kommandozeile auch ohne Passwort und funktioniert sehr gut.

    Wenn ich aber dieselbe Befehlszeile aus einem C-Programm mit

    system("SSH user@IP-Addr. <Programmaufruf>");

    starten möchte, fragt SSH wiederum nach einem Passwort.

    Habe auch bereits den Umweg über ein Bash-Script versucht.

    Das Bash-Script alleine schafft das ebenfalls ohne Passwort, bei Aufruf aus einem C-Programm wird das Passwort ärgerlicherweise wieder benötigt.

    Für Autmatisierungszwecke benötige ich SSH jedoch ohne Passworteingabe!

    Hat jemand eine Idee, weshalb das mit system(...) in C nicht funktioniert?

    Was ist zu tun, damit es klappt?

    Danke vorab.

    Euer Beschtler

  • Wenn ich aber dieselbe Befehlszeile aus einem C-Programm mit

    system("SSH user@IP-Addr. <Programmaufruf>");

    BTW: Seit wann bist Du C-Programmierer? Warum benutzt Du "system"?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Servus Beschtler,

    Was ist zu tun, damit es klappt?

    Ich würd's mal mit dem C-API versuchen -> http://api.libssh.org/stable/libssh_tutorial.html )

    Diese (imho überflüssigen) system() Aufrufe habe in meinen Augen nicht viel mit C-Programmierung zu tun. Da kannst Du dann auch direkt ein bash-script verwenden und Dir die Compiliererei sparen ...

    cu,

    -ds-

  • Wenn es der Lösung dient: Seit ein paar Jahren und weil man mit system("") in C Kommandos, Scripte, etc. aufrufen kann, z. B. um Funk- oder IR-Signale zu senden.

    Wenn es was besseres für diesen Zweck gibt, gerne.

  • Servus Beschtler,

    Ich würd's mal mit dem C-API versuchen -> http://api.libssh.org/stable/libssh_tutorial.html )

    Diese (imho überflüssigen) system() Aufrufe habe in meinen Augen nicht viel mit C-Programmierung zu tun. Da kannst Du dann auch direkt ein bash-script verwenden und Dir die Compiliererei sparen ...

    cu,

    -ds-

    Im C-Programm laufen Rechen- und Automatisierungsroutinen. Je nach Zustand und Ergebnis sollen Maßnahmen (z. B. andere C-Programme) auf einem anderen Rasp getriggert werden. Daher komme ich für dieses Beispiel ohne C und Automatisierung nicht aus.

    Sehe nicht, wie das API das Problem lösen soll.

    Fragestellung ist:

    wie kann man aus einem C-Programm ein Kommando auf einem anderen Raspi im Netzwerk starten?

    Wenn system(...) oder ssh nicht die richtigen Mittel sind, wie lautet dann eine Lösung?

    Danke.

    Einmal editiert, zuletzt von Beschtler (16. September 2018 um 21:35)

  • Je nach Zustand und Ergebnis sollen Maßnahmen (andere C-Programme) auf einem anderen Rasp getriggert werden.

    Das würde ich z.B. über einen TCP/IP basierten Server (das sind nur ein paar Zeilen Code) auf den verschiedenen Raspi realisieren, die dann von aussen entsprechend benachrichtigt werden und dann per fork/exec die Programme ausführen ...

    RPC wäre eine Alternative ... ist aber etwas mühseliger.

    cu,

    -ds-

  • Offensichtlich startet ssh per system in einem anderen Environment wie per bash. Lass Dir doch mal das Environment ausgeben (env) und vergleiche es mit dem was Du in der bash hast. Ich vermute entweder stimmt der user nicht oder pwd. Das musst Du dann im system Call vor dem ssh Aufruf setzen.

    EDIT: habe eben mal kurz im Netz gesucht und https://stackoverflow.com/questions/2905…-ssh-via-c-code gefunden ;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!