[[Vorlage(Getestet, noble)]] {{{#!vorlage Wissen [:Pakete_installieren:Pakete installieren] [:Editor: Einen Editor öffnen] [:Terminal: Ein Terminal öffnen] [:chown: Ändern des Dateibesitzers] [:chmod: Setzen der Dateirechte] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] [https://sendxmpp.hostname.sk/ sendxmpp] {en} ist ein Kommandozeilen-Programm zum Verschicken von Instant Messages via [:XMPP:]-Protokoll. Die IMs können sowohl an individuelle Empfänger als auch in Chatrooms übertragen werden. Leider scheint die Entwicklung eingestellt worden zu sein (s. Abschnitt [#Alternativen Alternativen]). Das Programm ist kein IM-Client, da mit sendxmpp Nachrichten lediglich versandt, aber nicht empfangen werden können! Voraussetzung zur Benutzung ist ein [:XMPP#Wo-kann-ich-ein-XMPP-Nutzerkonto-registrieren: Account] auf einem XMPP-Server. Da es ein Kommandozeilenprogramm ist, kann es in Skripten eingesetzt werden, um beispielsweise Diagnosedaten eines entfernten Rechners zu übertragen. = Installation = [[Bild(sendxmpp_Screenshot_simple.png, 280, align=right)]] Sendxmpp ist in den offiziellen Paketquellen enthalten und kann über das folgende Paket installiert werden [1]: {{{#!vorlage Paketinstallation sendxmpp, universe }}} = Konfiguration = Zur bequemen Benutzung empfiehlt es sich, die Datei '''~/.sendxmpprc''' im [:Homeverzeichnis:] anzulegen [2]. Diese Datei beinhaltet die Login-Daten zum XMPP-Server, den man zum Versenden der Nachrichten verwenden möchte, und wird automatisch berücksichtigt (falls vorhanden). Die Datei ist folgendermaßen aufgebaut: {{{ # Port und component sind optional username: jserver: port: password: component: }}} {{{#!vorlage Hinweis Die Datei '''~/.sendxmpprc''' muss aus Sicherheitsgründen dem Benutzer des Programms selbst gehören [4] und die Zugriffsrechte 600 haben [5]! }}} Die Angabe eines Ports ist nur notwendig, wenn dieser von Port `5222` (ohne Verschlüsselung oder Verschlüsselung per StartTLS) bzw. `5223` (direkte Verschlüsselung mit DirectTLS) abweicht oder es zu Fehlermeldungen (uninitialized value) kommt. == Beispiel für die Konfigurationsdatei == Angenommen, Nutzerin Alice hat auf dem Server `myjabberserver.com` den Account `alice@myjabberserver.com` mit dem Passwort `geheim`. Dann ist die Konfigurationsdatei wie folgt aufgebaut: {{{ # Account von Alice username: alice jserver: myjabberserver.com password: geheim }}} = Benutzung = Das Programm liest standardmäßig von [:Shell/Umleitungen: stdin] und sendet an die angegebene Empfängeradresse (zum Beispiel `bob@bobsjabberserver.org`): {{{#!vorlage Befehl echo 'hallo' | sendxmpp bob@bobsjabberserver.org }}} Um die Kommunikation mit [wikipedia:Transport_Layer_Security:TLS] zu sichern, nutzt man die Option `-t`. Heutzutage bieten eigentlich alle Server TLS an, bzw. viele erzwingen es sogar, dementsprechend ist es empfehlenswert immer die Option `-t` zu setzen: {{{#!vorlage Befehl echo 'geheime Nachricht' | sendxmpp -t bob@bobsjabberserver.org }}} Um eine Nachricht ohne die '''~/.sendxmpprc'''-Kofigurationsdatei verschicken zu können, werden die Optionen `-u -j -p ` benutzt. Wenn also Nutzerin Alice mit dem Account `alice@myjabberserver.com` und dem Passwort `geheim` ohne Konfigurationsdatei eine Nachricht verschicken möchte, lautet die Syntax wie folgt: {{{#!vorlage Befehl echo 'hallo ohne Konfigurationsfile' | sendxmpp -t -u alice -j myjabberserver.com -p geheim bob@bobsjabberserver.org }}} ## Option -f klappt für root leider nur von der Kommandozeile, getestet in einem Skript in /etc/network/if-up.d/ funktioniert es nicht :( ## ## Alternativ dazu kann man auch für den Benutzer root ein Konfigurationsdatei anlegen, welches mit der Option `-f ` benutzt werden kann (natürlich muß der Besitzer root und die Zugriffsrechte 600 gesetzt sein!): ## ## {{{#!vorlage Befehl ## echo 'root-hallo' | sendxmpp -f -t bob@bobsjabberserver.org ## }}} == Übersicht der wichtiger Optionen von sendxmpp == Hier noch einmal die genannten und noch einige weitere Optionen in einer kurzen Übersicht: ||<-2 rowclass="titel"> Optionen für sendxmpp || || sendxmpp-Option || Beschreibung || || `-f ` || Benutzung einer alternativen Konfigurationsdatei. || || `-u ` || <|3 (> Damit ist der Programmaufruf auch ohne Konfigurationsdatei möglich! || || `-j ` || || `-p ` || || `-r ` || Angabe der Ressource, z.B. `Laptop` oder `Rechner@home` || || `-t` || Verschlüsselung der Nachricht mit TLS || || `-m ` || Hier wird nicht von stdin gelesen, sondern es wird der Inhalt von `` versendet || || `-i` || interactive-mode, fortlaufendes Lesen und Versenden von stdin || Es gibt noch mehr Parameter, welche man in der [:man:Manpage] von sendxmpp nachlesen kann. = Anwendungsbeispiele = Um zum Beispiel einem Freund mit Computerkenntnissen die öffentliche IP-Adresse des eigenen Computers mitzuteilen, damit dieser sich zu Wartungszwecken auf dem Rechner einloggt, kann dieser Einzeiler verwendet werden: {{{#!vorlage Befehl wget --quiet -O - http://showip.spamt.net | sendxmpp -t bob@bobsjabberserver.org }}} Man kann sich die Temperatur der Festplatte oder die Ausgaben von Hardwaresensoren senden lassen, z.B. aus einem Skript, welches als Cron-Job (bitte Hinweis unten beachten) wiederholt wird. Damit ist die bequeme Überwachung von Hardwaredaten eines Computers von einem entfernten Computer möglich. {{{#!vorlage Befehl # Ausgabe von sensors sensors | sendxmpp -t bob@bobsjabberserver.org }}} Es ist möglich, kontinuierlich die Systemnachrichten mit dem sogenannten interactive-mode (Option `-i`) zu verschicken. ##Mit der Option `-i` kann man kontinuierlich von stdin lesen und senden: {{{#!vorlage Befehl tail -f /var/log/syslog | sendxmpp -t -i bob@bobsjabberserver.org }}} = Problembehebung = Es gibt viele Fälle, in denen sendxmpp mit [:sudo:Root-Rechten] ausgeführt würde, beispielsweise in [:Cron:]-Jobs. Da insbesondere bei Netzwerkverbindungen leicht ausnutzbare Sicherheitslücken entstehen können, ist es in solchen Fällen dringend anzuraten, sendxmpp mit normalen Benutzerrechten auszuführen. Für Zwecke wie die oben genannten, wo sendxmpp regelmäßig genutzt werden soll, ist es ratsam, hierfür einen eigenen [:adduser:Benutzer anzulegen] (Den eigenen Benutzer hierfür zu verwenden ist keine gute Lösung: Damit hat ein potentieller Angreifer zwar keine Root-Rechte, hat aber dennoch Zugriff auf alle Dateien des Benutzers). sendxmpp kann dann mit [:sudo:] aufgerufen werden: {{{#!vorlage Befehl sudo -H -u sendxmpp `sendxmpp OPTIONEN` }}} Die Option `-u` gibt den verwendeten Benutzer an (hier wird angenommen, dass der angelegte Benutzer sendxmpp heißt), die Option `-H` sorgt dafür, dass als Homeverzeichnis das des angegebenen Benutzers verwendet wird und nicht das des aufrufenden Benutzers (meist wohl root). Je nachdem, wo man die zu verwendende sendxmpp-Konfigurationsdatei ablegen möchte, kann man diese Option natürlich auch weglassen. = Alternativen = Da sendxmpp seit 2014 kein Update mehr erhielt sind mitterweile einige Alternativen erstellt worden: * [github:moparisthebest/sendxmpp-py:sendxmpp-py] {en} * [github:moparisthebest/sendxmpp-rs:sendxmpp-rs] {en} * [github:majewsky/xmpp-bridge:xmpp-bridge] {en} * [gitlab:sbrl/xmppbridge:xmppbridge] {en} * [:go-sendxmpp:go-sendxmpp] (Auch in Ubuntu verfügbar.) Eine Übersicht über diverse `sendxmpp`-Alternativen gibt es im [https://wiki.xmpp.org/web/User:MDosch/Sendxmpp_incarnations XSF-Wiki] {en}. = Links = * [https://sendxmpp.hostname.sk/ Projektseite] {en} * [:XMPP:] {Übersicht} Übersichtsartikel #tag: Netzwerk, Internet, Shell, Kommunikation, Instant Messenger, jabber